2012-07-10 68 views
3

我有一個線程安全HttpClient爲整個應用程序,我有一個服務和一個活動,在不同的線程中非常頻繁地進行各種REST API調用。 有時候,我需要取消一個已啓動的HttpRequest,因爲我已經需要用更新的數據啓動另一個。 我不想讓用戶等待第一個請求完成,然後等待第二個請求,也許此時用戶將再次更新數據,我需要調用第三個請求。 所以我想要做的是用舊數據取消請求並開始一個新的數據。我試圖取消AsyncTask,但由於某種原因它不取消已啓動的請求。這是我的代碼:如何在Android中取消HttpRequest

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 但是我只有一個客戶端和經理,我不想在每次進行REST調用時創建它們。 我該怎麼辦?如果有辦法取消所有正在運行的請求,我會很高興,但是如果有辦法取消單獨的請求,那將會很整潔。

+0

建議重複。 http://stackoverflow.com/questions/7140565/how-do-i-cancel-an-android-http-request/7311393#7311393 – 2015-04-27 21:37:53

回答

0

取消異步任務只會將任務的IsCanceled標誌設置爲true。如果你想要停止你的後臺任務,你必須在runInBackground函數的基本不同的里程碑中明確地檢查IsCanceled標誌。我記得之前遇到過這個問題,無法找到停止HTTPRequest的明確方式。我所做的是我基本上忽略了第一個AsyncTask並啓動了一個新的AsyncTask。由於第一項任務被取消,每當它完成運行時,我都會通過檢查IsCanceled標誌來放棄信息。

+1

丟棄更改是好的,但請求正在花費時間,電池,3G流量等等 – 2012-07-10 18:15:35