1

一段时间以来,我一直在与我的一项服务中发生的 ANR 作斗争。它很难重现,而且 UI 似乎在 100% 的时间发生之前就具有完整的功能,从来没有任何明显的延迟或冻结。我的服务有一个 TimerTask 和一些运行的 AsyncTask,仅此而已。

当您在 2.2 中使用 Android Market 报告它时,我得到的堆栈跟踪很难阅读,似乎没有直接引用我的任何代码,而只是来自 SDK 中的类。任何人都可以看看堆栈跟踪,看看你是否能说出发生了什么。

打印出来的东西太大了,我选择把它贴到pastebin,我希望这不违反规则。 http://pastebin.com/KHUD0UHW

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

4

1 回答 1

5

这可能不是您的应用程序的错。无论“当前”应用程序是什么,都会显示 ANR。但是,如果系统上的另一个应用程序确实占用了您的 CPU 并迫使您的应用程序饿死,那么您的应用程序将获得 ANR,因为它具有用户的焦点。如果是这种情况,你无能为力。也许最好的测试方法是观察或强制系统进行同步。同步通常在手机上非常繁重,可能会导致功能较弱的手机出现严重滞后。

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

于 2010-09-21T05:16:53.220 回答