3

アプリケーション全体に 1 つのスレッド セーフな HttpClient があり、別のスレッドでさまざまな REST API 呼び出しを非常に頻繁に行うサービスとアクティビティがあります。また、更新されたデータで別の HttpRequest を開始する必要があるため、開始した HttpRequest をキャンセルする必要がある場合もあります。最初のリクエストが完了するのをユーザーに待たせてから、2 番目のリクエストを待たせたくありません。おそらくこの時点で、ユーザーはデータを再度更新し、3 番目のリクエストを呼び出す必要があります。だから私がやりたいのは、古いデータでリクエストをキャンセルして、新しいデータを開始することです。AsyncTask をキャンセルしようとしましたが、何らかの理由で開始されたリクエストがキャンセルされません。これが私のコードです:

if (getAlbumImage != null && getAlbumImage.getStatus() == AsyncTask.Status.RUNNING) {
    Log.d(VibesApplication.VIBES, "cancelling image loader");
    getAlbumImage.cancel(true);
}
getAlbumImage = new GetAndSetAlbumImage();
getAlbumImage.execute(performer, name);

また、接続マネージャーをシャットダウンしてみました。ここで提案されているように: https://stackoverflow.com/a/7311393/1032286 しかし、クライアントとマネージャーは 1 つしかないため、REST 呼び出しを行うたびにそれらを作成したくありません。私は何をすべきか?実行中のリクエストを全部キャンセルできる方法があれば嬉しいのですが、個別にキャンセルできる方法があればいいですね。

4

2 に答える 2

5

試すyourHttpRequest.abort()

両方HttpGetHttpPost実装し、メソッドAbortableHttpRequestを持っていますabort()

http://developer.android.com/reference/org/apache/http/client/methods/AbortableHttpRequest.html

于 2012-07-10T18:13:09.963 に答える
0

非同期タスクをキャンセルすると、タスクの IsCanceled フラグが true に設定されるだけです。バックグラウンド タスクを停止するには、runInBackground 関数の基本的に異なるマイルストーンで IsCanceled フラグを明示的にチェックする必要があります。以前にこの問題に遭遇したことを覚えていますが、HTTPRequest を停止する明示的な方法が見つかりませんでした。私がしたことは、基本的に最初の AsyncTask を無視し、新しい AsyncTask を開始したことです。最初のタスクはキャンセルされるため、実行が終了するたびに、IsCanceled フラグをチェックして情報を破棄します。

于 2012-07-10T18:13:06.340 に答える