2011-02-02 64 views
2

我遇到了asynctasks和http請求的問題。已取消AsyncTask掛起新的HttpRequests

用戶可以按兩個不同的按鈕。兩個按鈕都從Web服務器下載信息。我希望這些請求可以被取消。在每次調用之前顯示進度對話框。

http請求是在一個asynctask中執行的,並且我在進度對話框上有一個OnDismiss偵聽器,如果按下了back,它將取消asynctask。

它工作50/50。

如果我做了http請求,取消了asynctask,然後做了一個新的請求,它可能會起作用,但也可能導致http請求掛起無限。

這條線是它掛起:

response = httpclient.execute(urlConnection, context);

是否有任何其他的方式做一個電話是取消還是有什麼我可以做,以避免掛?

+0

這裏是一個關於如何取消的AsyncTask http://www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ – 2016-06-29 17:12:12

回答

1

我寫了一個AsyncTask來通過http執行一些下載,並且我發現在任務上調用cancel()實際上並不會停止任務的執行。 「取消」任務將繼續執行其後臺操作。撥打電話cancel()只是撥打電話onCancelled(),然後AsyncTask撥打撥打電話onPostExecute()。也許你的第一個任務仍然擁有一些下一個任務需要的網絡資源?

+0

感謝爲例!這使我朝着正確的方向前進。我從來沒有想過`onCancelled()`。所以我試圖關閉`onCancelled()`中的連接管理器,然後再次直接重新啓動它,並使其工作。也許不是最好的解決方案,但它的工作原理。 – Magnus 2011-02-02 22:59:25

1

嘗試調用

httpclient.getConnectionManager().shutdown();