一、前言
APP在运行过程中,因为使用大量的耗时操作在主线程中,导致主线程阻塞,进而表现出应用卡住没有反应的情况,这个时候,系统就出手了,弹出提示框:应用暂时没有反应,是选择“等待”,还是“停止”。这种现象,就是所谓的应用ANR问题。好在framework系统已经有系统地监控anr问题了,遇到应用anr,系统会自动在目录下将anr日志记录下来,写在文件里,开发者可以通过导出的方式,将日志导出来,以便查找anr的原因。但是为了保护手机隐私,这里无法通过查看目录找到anr文件目录了。下面告诉你怎么导出anr文件夹,然后跟踪问题。
二、步骤
1、导出。这里我们使用程序员最便捷的方式来导出anr文件,使用开发工具as自带的adb工具:Terminal。adb本身自带Android Debug Bridge,输入命令: adb bugreport xxx.zip。xxx.zip是压缩文件名。
输入导出命令
这个时候,打包的zip文件就在你工程的根目录下,也就是你adb所在的目录下面,所以特别方便,拿到立即就可以跟踪问题。
2、跟踪。解压文件之后,anr日志在FS\data\anr文件夹下面,可以使用Notepad打开文件。跟踪anr问题,主要就找main线程,搜索关键词“main”即可,然后一步一步往下跟,找到自己的项目代码。
跟踪anr问题
3、优化。这个部分就是找代码这里是否有在主线程里执行的耗时操作,找到可以采用子线程的方式运行。优化是解决anr问题的关键,我也在学习中。
三、结尾
导出anr问题和跟踪问题都比较简单。主要是平时写代码过程中,要养成良好的代码习惯,这样自然而然anr问题就减少了。有些耗时操作,是native方法。我们可能不太清楚,所以也就无法完全规避,只要发现了,优化就好。