ANR是什么?如何避免和解决ANR

1:Application Not Responding,即应用无响应

2:出现的原因有三种:

(1)KeyDispatchTimeout(5 seconds)主要类型按键或触摸事件在特定时间内无响应

(2)BroadcastTimeout(10 seconds)BoradcastReceiver在特定的时间内无法处理

(3)ServiceTimeout(20 seconds)小概率类型Service在特定的时间内无法处理完成


3:避免ANR最核心的一点就是在主线程减少耗时操作。通常需要从那个以下几个方案下手:

(1)使用子线程处理耗时IO操作

(2)降低子线程优先级,使用Thread或者HandlerThread时,调用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)设置优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同

(3)使用Handler处理子线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程

(4)Activity的onCreate和onResume回调中尽量避免耗时的代码

(5)BroadcastReceiver中onReceiver代码也要尽量减少耗时操作,建议使用intentService处理。intentService是一个异步的,会自动停止的服务,很好解决了传统的Service中处理完耗时操作忘记停止并销毁Service的问题

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容