【发布时间】:2011-05-04 02:35:29
【问题描述】:
我遇到了 AsyncTask 类的问题。创建 4 或 5 个任务后,我的任务似乎停止工作。
我有 2 项活动。 MainActivity 只包含一个按钮,用于启动名为 ImageActivity 的第二个活动。
ImageActivity 非常简单。它有一个设置布局的 onCreate,然后它启动一个新的 AsyncTask 从互联网加载图像。这在前几次工作正常。但它突然停止工作。每次都会运行 onPreExecute 方法,但不会运行 doInBackground 方法。我试图用一个睡眠循环来简化 doInBackground,同样的事情也发生了。我无法理解这种行为,因为 asynctask 在 onDestroy 方法中被取消并设置为 null。所以每次我启动一个新的 ImageActivity 时,我也会创建一个新的 AsyncTask。
我通过点击后退按钮重新创建 ImageActivity 和任务,然后单击 MainActivity 上的按钮。
有什么想法吗?我真的很纠结这个。
更新:启动 ImageActivity 的代码(在按钮 onClickListener 内)
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
intent.setClassName(this, ImageActivity.class.getName());
startActivity(intent);
上面的代码启动了这个活动
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);
}
}
更新:
我已经使用传统线程和 runOnUiThread 方法的组合进行了测试,它似乎工作得更好。现在线程每次都运行。
【问题讨论】:
-
发布您的代码。你怎么称呼它。我们不知道如何在没有代码的情况下为您提供帮助
-
有完全相同的问题,在我的应用程序中启动多个 AsyncTasks 后,应用程序只执行到 onPreExecute(),但没有进入 doInBackground()。现在尝试你的线程方法..
-
我也有同样的问题。奇怪的是,它因设备而异。它发生在平板电脑(Android 4.0)上,但运行完全相同代码的手机(Android 2.3.4)没有。
-
在我的情况下
doInBackground有效,但里面的Log.d()无效!