我正在研究实时消息应用程序。我写了处理接收传入消息的部分。当我收到消息时,我将在SQ-LITE
中插入记录并触发回调以通知更新的UI(ListView
)。在回调中,我实现了一些更新UI的东西。我正在使用游标适配器。在回调中,我将在后台启动AsyncTask
,我将查询数据库以获取聊天记录。在onPostExecute
中,我将使用从后台查询的光标并分配给适配器并更新UI。
所以我的问题是:
如果有许多传入消息,它将触发许多AsyncTask
并多次更新UI。因此它会使ListView
非常“滞后”甚至用户无法做任何事情。如何停止/取消AsyncTask
并仅处理最新的{1},因为我将获取数据库中的所有聊天记录,这意味着对数据库中聊天记录的最新查询应该是正确的。
任何人都可以建议如何阻止AsyncTask
或任何其他想法来处理此案例吗?
答案 0 :(得分:2)
在创建它们时(或在onPreExecute()方法中)将AsyncTasks放入List中,并在它们完成时从列表中删除它们(在onPostExecute()方法中)。这样你的列表将包含所有当前的,而不是已完成的AsyncTasks,所以当你需要停止所有这些时,只需遍历列表并停止每个任务,除了最后添加的任务。