2017-11-16 16 views
0

私はクラス名がですGetDataからAsyncTaskに及んでいます。他のクラスでは、私はGetDataのからオブジェクトを持っており、このコードで、私はそれを使用します。AndroidでAsyncTaskクラスを取り消します

GetData getData = new GetData(); 
getData().execute(); 

が、私はボタンをクリックしたときに、このスレッドを停止したいです。私はそれがでdoInBackgroundている間、私は、スレッドをキャンセルした場合、それが停止したか、それはonPostExecuteに行き、その後、停止知りたい

getData().cancel(true); 

:私はこれを行いますか? onCancelled(オブジェクト)になり、このメソッドを呼び出す

+0

https://stackoverflow.com/questions/2735102/ideal-way-to-cancel-an-executing-asynctask – Prem

答えて

0

cancel(boolean)を呼び出すと、いつでもタスクをキャンセルできます。このメソッドを呼び出すと、以降のisCancelled()の呼び出しによってtrueが返されます。このメソッドを呼び出すと、doInBackground(Object [])が返された後にonPostExecute(Object)の代わりにonCancelled(Object)が呼び出されます。タスクができるだけ早くキャンセルされるように、可能であれば、doInBackground(Object [])から定期的にisCancelled()の戻り値を定期的にチェックする必要があります(ループ内など)。

:あなたは次のようにあなたのasyncTaskがキャンセルされたときにそれに応じてUIを更新するために、キャンセルのためのメソッドをオーバーライドすることができます

onPostExecute(Result result) 
{ 
} 

https://developer.android.com/reference/android/os/AsyncTask.html

同じように

onCancelled(Result result) 
{ 
    // here you can handle situation according to your requirements 
} 

だからここにあなたの注目点は、それがonPostExecuteに入る前に、あなたのタスクをキャンセルするたびに、それはonPostExecuteにはなりませんが、onCancelledにジャンプしますということです。また、task.cancel(true)を呼び出すこともできます。必要なチェックを適用して条件に応じてpostExecuteを実行します。

-1

From the Android documentation:

doInBackground(オブジェクト[])復帰した後、UIスレッド上で呼び出されます。このメソッドを呼び出すと、onPostExecute(Object)が呼び出されないことが保証されます。

したがって、onPostExecuteは呼び出されません。

関連する問題