2

重複の可能性:
キャンセルされた AsyncTask での onPostExecute

代わりに呼び出す必要があるとドキュメントに記載されている場合、AsyncTask静止呼び出しをキャンセルするのはなぜですか。これは長く続くバグですか?onPostExecuteonCancelled

私の場合cancel(true)は asynctask であり、終了してdoInBackgroundから onPostExecutes を呼び出します。最後に、それは

java.lang.InterruptedException

これが意図された動作である場合、Exceptionとにかくこれをオブジェクトとして取得できますか?

4

2 に答える 2

1

onPostExecute呼び出し後onCancelled

于 2012-05-03T09:47:29.850 に答える
1

cancel() メソッドのドキュメントを読むと、次のことがわかります。

このタスクの実行をキャンセルしようとします。タスクが既に完了している、キャンセルされている、またはその他の理由でキャンセルできなかった場合、この試行は失敗します。

cancel() を呼び出すと、isCancelled() が true に設定されます。doInBackground でこのメソッドの戻り値を定期的にチェックしていますか?

   protected Object doInBackground(Object... x) {  
   while (/* condition */) { 
      // work...    
   if (isCancelled()) break; 
    }    
 return null;  } 

例外 java.lang.InterruptedException については、複数の理由が考えられます。

私の推測では、間違った場所/時間で cancel() を呼び出している可能性があり、doInBackground で isCancelled() を定期的にチェックしていない可能性があるため、タスクは正常に完了し、onPostExecute() が呼び出されます。

于 2012-05-03T10:08:25.593 に答える