2013-03-03 112 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