我試圖解決我的應用程序中有一個非常零星的故障。進入應用程序時,主UI線程處理結束,並將控制權交給後臺線程以檢索一些數據。當數據被檢索時,控制權返回到主UI線程以處理它以供顯示。然而,在一些罕見的場合(它有99%的時間工作),AsyncTask似乎無法被稱爲永遠等待AsyncTask完成而將應用程序置於靜態狀態。什麼會導致AsyncTask無法執行?
下面的代碼在Activity
快照:
//method call from main UI thread
private void fetchSomeData() {
Log.d("myTag", "In fecthSomeData()");
new ReadFileAsyncTask<DataModel>().execute(this);
}
這裏的ReadFileAsyncTask
實現:
public class ReadFileAsyncTask<A> extends AsyncTask<I_ReadFileListener<A>, Void, A>
{
I_ReadFileListener<A> listener;
@Override
@SuppressWarnings("unchecked")
protected A doInBackground(I_ReadFileListener<A>... params)
{
listener = params[0];
Log.d("mytag", "BACKGROUND: Loading " + listener.getFilename() + " from disk");
A fileContents = (A) FileUtils.readDataFromInternalStorage(listener.getContext(), listener.getFilename());
return fileContents;
}
@Override
protected void onPostExecute(A result)
{
Log.d("myTag", "FOREGROUND: Executing onFileRetrieved listener");
listener.onFileRetrieved(result);
}
}
捕捉這難得失敗yeilds日誌:
In fetchSomeData()
...
(Other log messages from other interactions with the activity such as menu creation and navigation initialization)
但關鍵的是,不是來自第二行代碼的日誌聲明方法doInBackground
。有一個想法是,這個日誌聲明失敗了,但我沒有看到任何強制停止消息,我的日誌或ACRA崩潰報告中的錯誤。應用程序仍然處於活動狀態(我可以導航到其他活動並返回),所以我不知道什麼可能會阻止此後臺線程正常運行。有任何想法嗎?
你使用任何其他AsyncTasks,而這一個正在執行?或者這是唯一的AsyncTask? – 2013-02-24 22:17:24
這是應用程序啓動的第一個AsyncTask。我有很多其他人,但他們在完成這個之後被調用。 – 2013-02-24 22:22:06
這是什麼類型的Android設備?你有沒有嘗試過別人? – 2013-02-24 22:54:38