0

特定の条件で非同期タスクをキャンセルしたい。私は次のことをやっています:

MyService.java

....
if(condition){

 asyncTask.cancel(true); // its return the true as well

}
...

MyAsynTask.java

...

protected Object doInBackground(Object... x) {
    while (/* condition */) {
      // work...
      if (isCancelled()){ // Here task goes in to wait state
 break;
  }
      else{
 //continue to download file

   }


    }
    return null;
 }
...

DDMS を使用すると、タスクが待機状態になることがわかりました。この問題を解決するための提案は高く評価されます。 スレッド

ありがとう、ユヴィ

4

2 に答える 2

1

AsyncTaskは、PoolExecutorの一部です。最初のタスクを実行すると、Executorは最初のスレッドを作成し、そのスレッドでタスクを実行します。タスクの実行が終了した後、スレッドは削除されません。新しいタスクの待機を開始します。

したがって、AsyncTaskスレッドが待機状態になっているのは正常です。

PS長時間の操作にはAsyncTaskを使用しない方がよいでしょう。独自のエグゼキュータまたはスレッドを使用してください。

PPS AsyncTaskは、4.x以降のシングルスレッドエグゼキュータを使用します。気をつけて )

于 2013-02-06T09:06:45.733 に答える
0

を明示的に呼び出すasyncTask.cancel(true);と、onCancelled()メソッドが呼び出されます。次のメソッドをオーバーライドしてみてください。

@Override
protected void onCancelled() {
    //what you want to do when the task was cancelled.
}
于 2013-02-06T10:34:56.123 に答える