一段时间以来,我一直在与一种服务中发生的ANR作战。复制非常困难,并且UI似乎在100%的时间发生之前就具有完整的功能,从来没有任何明显的延迟或冻结。我的服务有一个TimerTask和几个正在运行的AsyncTask就是这样。

当您在2.2版的Android Market中进行报告时,我得到的堆栈跟踪很难阅读,似乎没有直接引用我的任何代码,而只是引用了SDK中的类。任何人都可以看一下堆栈跟踪,看看是否可以告诉发生了什么事。

打印的内容太大,我选择将其发布到pastebin,我希望这不违反规则。
http://pastebin.com/KHUD0UHW

这也是Logcat日志
http://pastebin.com/V5xSey36

最佳答案

可能不是您的应用程序有问题。无论“当前”应用程序是什么,都会显示一个ANR。但是,如果系统上的另一个应用程序确实占用了您的CPU并迫使您的应用程序饿了,您的应用程序将获得ANR,因为它具有用户的关注点。如果是这种情况,您将无能为力。对此进行测试的最佳方法可能是监视或强制系统进行同步。同步通常在电话上非常沉重,并且可能在功能较弱的电话上造成严重的延迟。

测试手机速度是否较慢的另一种方法是安装市场上的大型应用程序。下载后进入“安装”阶段,请在您的应用程序中做一些密集的工作。如果安装阶段花费的时间超过5秒钟左右,则它很有可能使您的应用获得ANR。这是因为安装应用程序时IO速度较差。 IO会阻止其他应用获取CPU时间。 Android认为这意味着您正在偷它。

关于android - 帮助阅读Android中的ANR堆栈跟踪,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3705198/

10-13 08:43