在我的应用程序中,我使用AsyncTask启动我的Activity以获取特定联系人的铃声。尽管状态为正在运行,AsyncTask有时不会运行?
它工作正常,但我注意到,如果应用程序在AsyncTask到达doInBackground方法之前停止两次,那么当Activity再次启动时,AsyncTask无法正常运行,只能进入onPreExecute()方法。
这里是我的代码:
的的AsyncTask本身:
private class SelectRingtoneTask extends AsyncTask<String, Void, Void> {
// can use UI thread here
protected void onPreExecute() {
Log.d("cda", "Into selectRingToneTask - onPreExecute() - " + selectRingtoneFinished);
}
// automatically done on worker thread (separate from UI thread)
protected Void doInBackground(final String... args) {
Log.d("cda", "Into selectRingToneTask - !!!!!!!!!!!!!!!");
getRingTone();
return null;
}
// can use UI thread here
protected void onPostExecute(final Void unused) {
selectRingtoneFinished = true;
Log.d("cda", "Into selectRingToneTask - onPostExecute - " + selectRingtoneFinished);
}
}
当我打电话的AsyncTask在启动时:
if(srtt == null){
srtt = new SelectRingtoneTask();
Log.d("cda", "RingTone - " + srtt.getStatus());
}
srtt.execute();
当我在AsyncTask完成之前启动活动并关闭活动时,会出现问题,如果发生一次,它似乎很好,但在第二次发生AsyncTask后,只会进入onPreExecute()方法,并且永远不会再完成,直到应用程序强制停止并重新启动。
有没有人知道为什么会发生这种情况?
感谢Pentium10,所以我应该在我的Activities onDestroy()方法中调用selectrintongtask.cancel(true)?在每个Asynctask方法中,在执行方法中的任何事情之前,执行isCancelled检查?在sheeles surce代码中,是否有任何特定的文件可以突出显示此最佳?再次感谢 – 2010-09-10 09:43:24
只是添加我已经实现取消我的onDestroy方法中的任务,它已经导致了一些奇怪的行为,而不是当我第一次结束我的活动,第二次我尝试启动它,我只得到一个空白屏幕 – 2010-09-10 10:09:16
查看该文件中的AddBookActivity.java和UserTask(mAddTask)和SearchTask。 http://code.google.com/p/shelves/source/browse/trunk/Shelves/src/org/curiouscreature/android/shelves/activity/AddBookActivity.java – Pentium10 2010-09-10 10:32:38