我遇到了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