我的应用程序中有一个BroadcastReceiver,它每X秒被ALARM_SERVICE调用一次。这个BroadcastReceiver调用了另一个由AsyncTask运行的服务(以试图避免阻止主线程),但是我已经从用户和Google提供的日志中收到了一些ANR,如果我无法读取,老实说

有人可以帮助我了解日志并解决问题吗?

这是Google提供给我的日志的11页中的1页:

最佳答案

我有同样的问题,如果您使用两个线程!,则会出现问题:

首先从一个线程运行(例如:Asynctask):

  • disableAutoCommit
  • 发生SQLiteException!
  • restoreAutocommit没有被调用!!!

  • 然后尝试从其他线程(例如:UI-Thread)使用dao->由于第一个任务缺少restoreAutocommit,它将永远等待->这会导致ANR!

    解决方案是:添加一个finally以恢复autocommit

    例子:
        boolean prev = entityDao.disableAutoCommit();
        try
        {
            entityDao.disableAutoCommit();
            storeData(data);// if an Exception occurs -> finally is also called
        }
        finally
        {
            entityDao.restoreAutocommit(prev);
        }
    

    关于java - ANR意向广播,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19408126/

    10-10 00:53