在Android中,应用的响应性被活动管理器(Activity Manager)和窗口管理器(Window Manager)这两个系统服务所监视。当用户触发了输入事件(如键盘输入,点击按钮等)或者特定事件没有处理完毕,Android会认为该应用无响应,便弹出ANR对话框。
场景:
键盘输入事件和触摸无响应5s
BroadCastReciver 前台处理超过10s 后台超过60s
Server 前台处理超过20s 后台超过200s
ANR出现的类型有两种
1、主线程耗时导致
2、CPU、内存、IO 占用过高资源耗尽(其他进程也可以导致)
解决:
1、尽量使用子线程 比如访问网络、访问数据库等操作,需要开辟子线程,在子线程处理耗时的操作,主线程主要实现UI的操作。
2、避免CPU占用过高,简化方法,减少执行时间
3、避免内存占用过高,防止内存泄漏
4、服务内容提供者尽量不要执行太长时间的任务。