相关疑难解决方法(0)

AysncTask取消自身仍调用onPostExecute()

AsyncTask.cancel(true)从内部呼叫doInBackground(),而不是呼叫 onCancelled(),Android呼叫onPostExecute().但根据文件:

调用此方法将导致在返回onCancelled(Object)后在UI线程上调用doInBackground(Object[]).调用此方法可确保onPostExecute(Object)永远不会调用此方法.

这是Android中的错误吗?

更多观察:

  1. cancel(false)从任一线程调用都按照文档中的说明进行操作.
  2. cancel(true)从UI任务调用不会调用onPostExecute(),也不会抛出InterruptedException下面的logcat跟踪中看到的内容.
  3. 调用cancel(false/true)从任何线程调用有时onCancelled()甚至之前doInBackground()的回报.这显然违反了文件,其中规定:

调用此方法将导致在返回doInBackground(Object[])在UI线程上调用onCancelled(Object).

代码:(在Android 2.2设备上测试过)

protected Void doInBackground(Void... params) {
    Log.d(TAG, "started doInBackground()");
    while (!isCancelled()) {
        boolean ret = cancel(true);
        Log.d(TAG, "cancel() returned: " + ret);
    }
    Log.d(TAG, "returning from doInBackground()");
    return null;
}
Run Code Online (Sandbox Code Playgroud)

Logcat输出

04-15 21:38:55.519: …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask

7
推荐指数
1
解决办法
2345
查看次数

标签 统计

android ×1

android-asynctask ×1