所以我遇到了一个奇怪的问题,我无法找到解释。我有一个异步任务,在其doBackground方法中等待一个特定的变量设置然后"等待"已通知
private class TestAsyncTask extends AsyncTask<Void, Object, Boolean> {
@Override
protected void onPreExecute() {
Log.d("Test1");
}
@Override
protected Boolean doInBackground(Void... params) {
Log.d("Test2");
while (nextCardToPlay == null) {
wait();
}
Log.d("Test3");
}
}
活动A:
protected void onCreate(){
a = new TestAsyncTask().execute();
}
protected void onPause(){
a.cancel()
}
因此,您可以看到活动何时开始,asyncTask已启动。当活动关闭时,asyncTask应该被取消。
我注意到,如果我打开活动,关闭它,然后重新打开它,那么就会创建asynctask并处于等待模式(从不取消)。没问题。令人困惑的是,当我启动活动时(虽然陈旧的asyncTask存在),然后似乎启动了新的asyncTask(因为调用了OnPreExecute的日志)但是nextAsyncTask中的doInBackground没有被执行,因为Test2日志不是展示。
知道为什么吗?
答案 0 :(得分:0)
如果你查看documentation,这个行为并不奇怪,{{3}}表示AsyncTasks
在单个后台线程上运行,即顺序运行。如果您确实希望您的任务在并行工作线程上运行,请使用executeOnExecutor()
方法而不是简单的execute()
并将AsyncTask.THREAD_POOL_EXECUTOR
参数传递给它。