AsyncTask不会停止

时间:2011-08-12 15:29:31

标签: android android-asynctask

我创建了一个AsyncTask,它从数据库加载消息传递历史记录,然后在设备屏幕上显示它:

private void loadHistoryFromDB(Date lastUpdateDate)
    {
    final class DBAsyncTask extends AsyncTask<Void, Void, List<XMPPMessage>>
    {
        @Override
        protected List<XMPPMessage> doInBackground(Void... arg0) 
        {
            List<XMPPMessage> messages = null;
            try 
            {
                messages = PersistenceManager.getXMPPMessagesFromDB(userInfo, 0, messagingActivity);
            }
            catch (SQLException e) 
            {
                e.printStackTrace();
            } 
            catch (LetsDatabaseException e)
            {
                e.printStackTrace();
            }
            return messages;
        }

它似乎工作正常,但在执行后,它会留下2个正在运行的线程,因此我无法完成活动。我该如何解决?

3 个答案:

答案 0 :(得分:2)

只要您的任务正常执行(退出onPostExecute),这不应该是您必须担心的事情。一旦执行,AsyncTask线程将坚持可能以线程池或单线程的形式重用,具体取决于平台版本。这是正常行为 - 它们最终会被清理/重复使用。

答案 1 :(得分:0)

首先,请确保在覆盖的方法调用顶部调用super.doInBackGround()

如果不是这样,可能是因为您正在维护与数据库的连接。

也就是说,您仍然在数据库上建立了锁。

看看您是否可以明确解锁数据库,这可能会解决您的问题。

您可以将其放在onPostExecute()方法中。

答案 2 :(得分:0)

这个问题很可能是由于围绕AsyncTask取消方法的混淆。

您需要将后台任务分解为可循环段,然后在每次循环迭代开始执行任务之前,您需要检查任务是否被取消以及是否需要中断循环。似乎没有任何其他方法可以阻止执行AsyncTask。

我已经在此处发布了有关此问题的详细指南:

http://tpbapp.com/android-development/android-asynctask-stop-running-cancel-method/