我遇到了AsyncTask類的問題。看起來我的任務在創建4或5個任務後停止工作。AsyncTask doInBackground不運行
我有2項活動。 MainActivity只保存一個按鈕來啓動名爲ImageActivity的第二個活動。
ImageActivity非常簡單。它得到了一個設置佈局的onCreate,然後它啓動一個新的AsyncTask,從Internet上加載一個圖像。這在前幾次運作良好。但比它突然停止工作。 onPreExecute方法每次運行,但不是doInBackground方法。我試圖用睡眠循環來簡化doInBackground,並且發生同樣的事情。我無法理解這種行爲,因爲asynctask在onDestroy方法中都被取消並設置爲null。所以每次我開始一個新的ImageActivity,我也創建一個新的AsyncTask。
我通過點擊後退按鈕並單擊MainActivity上的按鈕來重新創建ImageActivity和任務。
任何想法的人?我真的很苦惱這個。
UPDATE:代碼用於啓動ImageActivity
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
intent.setClassName(this, ImageActivity.class.getName());
startActivity(intent);
上面的代碼開始該活性(一個按鈕onClickListener內部)
public class ImageActivity extends Activity {
private AsyncTask<Void, Void, Void> task;
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.main);
task = new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute()
{
Log.d(TAG, "onPreExecute()");
}
@Override
protected Void doInBackground(Void... params)
{
Log.d(TAG, "doInBackground() -- Here is the download");
// downloadBitmap("http://mydomain.com/image.jpg")
return null;
}
@Override
protected void onPostExecute(Void res)
{
Log.d(TAG, "onPostExecute()");
if(isCancelled()){
return;
}
}
}.execute();
}
@Override
protected void onDestroy()
{
super.onDestroy();
task.cancel(true);
}
}
UPDATE:
我已經採用的組合測試傳統的線程和runOnUiThread方法,它似乎更好。現在線程每次都運行。
發佈您的代碼。你打電話過得怎麼樣?我們不知道如何在沒有代碼的情況下幫助您 – Falmarri 2010-11-02 19:07:37
完全相同的問題是,在我的應用程序中啓動多個AsyncTasks後,該應用程序僅執行onPreExecute(),但未輸入doInBackground()。嘗試你的線程方法現在.. – 2011-11-20 08:43:51
我有同樣的問題。奇怪的是,它因設備而異。它發生在平板電腦(Android 4.0)上,但運行完全相同的代碼的手機(Android 2.3.4)沒有它。 – Hong 2012-07-06 22:14:39