0

asynctask でファイルをダウンロードするためのダウンロード サービスがあります。一時停止と再開用のボタンがあります。一時停止を押すと、サービスを破棄して現在のタスクをキャンセルする必要があります。を使用してそれを達成しようとしました

Intent download=new Intent(Download.this, DownloadService.class); getApplicationContext().stopService(download);

そしてまた置く

stopself();

onDestroy(){} 関数内。私の問題は、 DownloadServiceが破棄されたときにDownloadTaskがキャンセルされないことです。問題の根本を見つけるのを手伝ってください。ありがとうございました。

4

2 に答える 2

1

サービスを停止する前に、AsyncTask をキャンセルする必要があります。AsyncTask は App プロセスがシャットダウンされるまで機能するためです。

したがって、HttpRequest をシャットダウンして、AsyncTask 内でこのブロッキング呼び出しを解除する必要があります。AsyncTask で HttpClient のインスタンスを属性として保持します。次のようなブレーク関数を Service に定義します。

public void stopTaskAndService(){
    yourAsyncTask.yourHttpClient.getConnectionManager().shutdown();
    yourAsyncTask.cancel(true) // prevent the onPostExecute() call
    stopself();
}
于 2013-07-31T20:00:56.543 に答える
0

何が起こっているのかを特定するには、さらにコードを確認する必要があります。

Service の代わりに IntentService を使用したほうがよいのではないでしょうか。これを考慮しましたか?

于 2013-07-31T19:31:07.957 に答える