2016-05-17 23 views
0

AsyncTaskのonCancelled(ブールaBoolean)のダイアログを閉じるしようとしています: 1. AsyncTaskが実行されている場合、私は 'myAsyncTask.cancel(true)'を呼び出すと呼び出されます。 2. AsyncTaskがすでにonPostExecute()を呼び出すと呼び出されることはありません。onPancalled()は、onPostExecute()が呼び出されると、cancel()を呼び出すことによって呼び出されませんか?

アイデアはありますか?

答えて

0

要するに、できません。

.cancel(true)メソッドを呼び出すと、AsyncTaskはonPostExecuteではなくonCancelledを実行します。

onPostExecuteはバックグラウンドタスクが終了し、UIスレッドに戻ることを意味します。

新しい方法があると思います。

onPostExecuteでは、ブール値isProcessing = trueを追加するだけです。

onPostExecuteを処理しない場合は、isProcessingの値をfalseに切り替えます。 (私はその方法についてはわかりません)

@Override 
protected void onPostExecute(Long result) { 
    if (isProcessing) { 
     Log.d(TAG, "onPostExecute - " + result); 
    } 
} 
0

実際には、AsyncTask.cancel()は結果を考慮しないでスレッドを強制終了しません。 AsyncTaskは「キャンセル」状態に設定されます。キャンセル状態を守るのはAsyncTaskの開発者次第です。

戦略の1つは、isCancelled()を時々チェックし、適切に行動することです。 onPostExecuteでは、 "キャンセル"状態を読み込み、onCancelled()(または共通ロジックを持つ他の関数)を手動で呼び出すこともできます。

関連する問題