asynctask的奇怪行为

时间:2014-03-22 19:34:47

标签: android android-asynctask

所以我遇到了一个奇怪的问题,我无法找到解释。我有一个异步任务,在其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日志不是展示。

知道为什么吗?

1 个答案:

答案 0 :(得分:0)

如果你查看documentation,这个行为并不奇怪,{{3}}表示AsyncTasks在单个后台线程上运行,即顺序运行。如果您确实希望您的任务在并行工作线程上运行,请使用executeOnExecutor()方法而不是简单的execute()并将AsyncTask.THREAD_POOL_EXECUTOR参数传递给它。