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");
       }
}

活动一:

protected void onCreate(){
     a = new TestAsyncTask().execute();
}
protected void onPause(){
    a.cancel()
}

因此,正如您所看到的,当活动启动时,asyncTask启动。当activity关闭时,asyncTask应该被取消。

我注意到的是,如果我打开活动,关闭它,并再次重新打开它,那么asynctask被创建并处于等待模式(从未取消)。没有问题。令人困惑的是,当我启动活动(而陈旧的asyncTask在那里),那么似乎是一个新的asyncTask启动(因为从OnPreExecute日志被调用)然而,在nextAsyncTask的doInBackground没有执行,因为Test2日志没有显示。

知道为什么吗?

如果你看一下文档,这种行为一点也不奇怪,它说明AsyncTasks在单个后台线程上运行,即顺序运行。如果你真的希望你的任务在并行工作线程上运行,那么使用executeOnExecutor()方法而不是简单的execute(),并传递AsyncTask.THREAD_POOL_EXECUTOR参数。

相关内容

  • 没有找到相关文章

最新更新