我有一個嵌套的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