通过DDMS方法分析阅读我的追踪(DEBUGGING ANR' s)

时间:2016-08-02 15:40:52

标签: android performance profiling trace ddms

问题

所以我的Android应用程序在15分钟后立即冻结/无响应(如果屏幕被触摸,我会得到ANR)。该应用程序旨在保持清醒而不是因为它被用于想要在一天中使用它的客户而锁定。然而,它在15分钟后停止工作,这是一段非常具体的时间,这使得它非常不寻常。我的内存使用情况很好,只使用了大约3%的设备内存和CPU负载仅使用14%的应用程序。

我研究过ANR并发现它是由UI阻塞造成的,因此我打开了DDMS并在应用程序运行时启动了方法分析。下图是我看到的。

enter image description here

使用黄色流程管理器(见下文)

调用该方法

enter image description here

我的光标所在的另一个红色方法是String方法,但我不知道这是一个大问题,因为它只持续大约1毫秒。

我的问题

大约每250毫秒,跟踪重复一次,我猜测进程管理器方法会阻塞UI线程一段时间,并且在执行过程中会有一些垃圾收集器时间。见下图。 enter image description here

我相信这是我的问题,但我不清楚进程管理器执行我的代码行的位置。有什么想法吗?我是使用这种方法分析工具的新手。 我的唯一猜测是它外观的SD卡要挂载吗? 请参阅调试图片! enter image description here

1 个答案:

答案 0 :(得分:0)

所以我从调试器视图和跟踪中发现,该进程管理器阻止了UI线程。在调试视图中,主线程 STOPPED 在被我的runnable CheckExternalSdRunnable调用后运行大约9毫秒 250毫秒。我想这会使性能陷入困境,无法处理输入事件。我注释掉了这一行调用runnable的代码,当然它已经运行了大约一天。

我重新打开了方法分析,果然,在主线程上运行的runnable已经消失,几乎没有显示任何UI阻塞!这一行代码完全消除了在短时间内阻止UI线程的所有其他较小进程。

其他任何有相同问题的人都应该在查看DDMS下的方法分析选项时打开调试器并查找阻止UI的进程,然后使用调试器查看主线程并查看代码段代码被调用导致应用程序显示ANR