我有一个嵌套的AsyncTask。这个简单的例子,证明了他们的工作:http://pastebin.com/0R9Cfxx1AsyncTask如何运行但不起作用?
然而,在我的生产代码,我嵌套的AsyncTask的getStatus返回== AsyncTask.RUNNING 然而,doInBackground()不执行。
这怎么可能?
我有一个嵌套的AsyncTask。这个简单的例子,证明了他们的工作:http://pastebin.com/0R9Cfxx1AsyncTask如何运行但不起作用?
然而,在我的生产代码,我嵌套的AsyncTask的getStatus返回== AsyncTask.RUNNING 然而,doInBackground()不执行。
这怎么可能?
我理解的AsyncTask的方式,你应该从主应用程序线程,它创建一个单独的线程,其中“doInBackground()”运行运行它。现在,如果您在另一个AsyncTask中运行嵌套的AsyncTask,则至少有三个线程总数:主应用程序线程,第一个AsyncTask线程和第二个AsyncTask线程。它们将全部并行运行,这打破了“嵌套”的概念。 我相信最好的方法是重构你的代码只使用一个AsyncTask。
你说得对,应该总是从主线程调用AsyncTask。另外,由于Honeycomb,AsyncTasks不再从线程池中提取,而是在同一个线程上按顺序执行。所以,即使OP没有为嵌套他的AsyncTasks发生错误,内部的一个也不会执行,直到在较新的设备上完成外部处理之后。 http://developer.android.com/reference/android/os/AsyncTask.html – MattDavis
这应该崩溃 - 你只能创建,并从主应用程序线程执行'AsyncTask'。 – CommonsWare