2013-03-03 103 views
0

我正在處理實時消息應用程序。我寫了處理接收傳入消息的部分。當我收到消息時,我會在SQ-LITE中插入記錄並觸發回調以注意更新的UI(ListView)。在回調中,我實現了一些更新UI的事情。我正在使用遊標適配器。在回調中,我將在後臺啓動一個AsyncTask,我將查詢數據庫以獲取聊天記錄。在onPostExecute中,我將使用遊標從後臺查詢並分配給適配器並更新UI。Android如何在AsyncTask運行過程中停止/取消AsyncTask?

所以我的問題是: 如果有很多傳入消息,它會觸發許多AsyncTask s和更新UI多次。所以它會使ListView非常「滯後」,甚至用戶也無能爲力。我如何停止/取消AsyncTask,並且只處理最新的一個,因爲我將獲取數據庫中的所有聊天記錄,這意味着對數據庫中聊天曆史的最新查詢應該是正確的。
任何人都可以建議如何停止AsyncTask或任何其他想法在這種情況下工作?

+0

它看起來像你需要一個'AsyncTask'的隊列來管理它們的數量......但是在停止'AsyncTask'時存在一個小問題。看到這篇文章的一些參考http://stackoverflow.com/questions/12971882/cancel-all-asynctask。 – 2013-03-03 11:41:02

回答

2

創建它們時(或onPreExecute()方法)將您的AsyncTasks放入列表中,並在完成時(在onPostExecute()方法中)將它們從列表中刪除。這樣你的列表將包含所有當前的AsyncTasks,而不是完成的,因此當你需要停止所有的AsyncTasks時,只需遍歷列表並停止除最後添加的任務之外的任何任務。

+0

你的想法很棒......但如何知道哪一個正在運行? – jjLin 2013-03-03 13:57:56

+2

您可以檢查任務是否正在輕鬆運行,如果任務正在運行,則下面的行爲true: 'if(task.getStatus()== AsyncTask.Status.RUNNING) – 2013-03-03 14:09:55