我的应用程序中有一个BroadcastReceiver,它每X秒被ALARM_SERVICE调用一次。这个BroadcastReceiver调用了另一个由AsyncTask运行的服务(以试图避免阻止主线程),但是我已经从用户和Google提供的日志中收到了一些ANR,如果我无法读取,老实说
有人可以帮助我了解日志并解决问题吗?
这是Google提供给我的日志的11页中的1页:
最佳答案
我有同样的问题,如果您使用两个线程!,则会出现问题:
首先从一个线程运行(例如:Asynctask):
然后尝试从其他线程(例如: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/