什么是ANR?ANR:Application Not Responding,即应用无响应。
ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现ANR,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。
默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。
1、ANR排错一般有三种类型
KeyDispatchTimeout(5 seconds) --主要是类型按键或触摸事件在特定时间内无响应BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成ServiceTimeout(20 secends) --小概率事件 Service在特定的时间内无法处理完成
2、哪些操作会导致ANR 在主线程执行以下操作:1. 高耗时的操作,如图像变换 2. 磁盘读写,数据库读写操作 3. 大量的创建新对象
3、如何避免
UI线程尽量只做跟UI相关的工作耗时的操作(比如数据库操作,I/O,连接网络或者别的有可能阻塞UI线程的操作)把它放在单独的线程处理尽量用Handler来处理UIThread和别的Thread之间的交互
4、解决的逻辑1. 使用AsyncTask 1. 在doInBackground()方法中执行耗时操作 2. 在onPostExecuted()更新UI 2. 使用Handler实现异步任务 1. 在子线程中处理耗时操作 2. 处理完成之后,通过handler.sendMessage()传递处理结果 3. 在handler的handleMessage()方法中更新UI 4. 或者使用handler.post()方法将消息放到Looper中
5、如何排查
首先分析log从trace.txt文件查看调用stack,adb pull data/anr/traces.txt ./mytraces.txt看代码仔细查看ANR的成因(iowait?block?memoryleak?)6、监测ANR的Watchdog
ANR简单见解
最新推荐文章于 2024-05-02 22:46:07 发布