2

Androidアプリケーションをダウンロードするファイルがあります。ユーザーがリストビューアイテムをクリックすると、ファイルがダウンロードされます。正常に動作します。ここで、現在のファイルのダウンロードをキャンセルして、ユーザーが他のアイテムをタップし、別のダウンロードがすでに進行している間に次のファイルを開始し、ダウンロードタスクをキャンセルする前にユーザーの確認を表示したいと思います。

これどうやってするの?

前もって感謝します

4

3 に答える 3

5

まず、チェックインする必要がありますAsyncTask

// in doInBackground, check if asynctask is canceled manually 
if (isCancelled()) break;

あなたの活動では、キャンセルしようとするときはいつでも、手動でキャンセルするだけAsyncTaskです。もちろん、新しいファイルを開始して別のファイルをダウンロードしてください。

mDownloadingTask.cancel(true);
于 2012-10-29T05:02:06.477 に答える
2

単純に、Asynctaskを変数に格納します。

mDownloadingTask = new Asynctask(){...};
mDownloadingTask.execute();

このタスクを停止して新しいタスクを開始する場合:

//close the current task if it # null
mDownloadingTask.cancel(true);
mDownloadingTask = null;
//Start new one
mDownloadingTask = new Asynctask(){...};
mDownloadingTask.execute();
于 2012-10-29T04:09:23.123 に答える
0

Cancel(false)フラグを設定します。フラグをチェックインしdoInBackGround()て、コードが実行することを停止できます。cancel(true)スレッドを中断することを除いて、同じことを行います。割り込みの詳細については、こちらをご覧ください。

これは、タスクにループコードがある場合にすべて有効です。ループを繰り返すたびに、を確認できますisCancelled()

しかし、あなたの質問のように、ファイルのダウンロードなどの一部のタスクはループを使用しません。おそらく、外部APIメソッドを呼び出しているだけなので、ここでは、このブロッキングメソッドに翻弄されています。適切に設計されている場合、割り込みが発生すると例外がスローされ、スレッドが終了します。

また、より良い実装を見てください、SafeAsyncTask

于 2012-10-29T04:30:43.123 に答える