Android ANR是什么?


前言

ANR:Application Not Responding,应用程序无响应

一、ANR产生的原因

Android系统中的AMS(ActivityManagerService) 和 WMS(WindowManagerService)会检测App的响应时间,如果App的主线程(UI线程)没有在规定的时间内处理完相应的工作,就会出现ANR警告。

以下四个条件可以产生ANR:
InputDispatching Timeout: 5s内无法响应屏幕触摸事件或键盘输入事件。
BroadcastQueue Timeout: BroadcastReceiver的事件(onRecieve方法)在规定时间内没处理完成(前台规定时间:10s,后台规定时间:60s)。
Service Timeout: 规定时间未完成启动 Timeout executing service(前台:20s 后台:200s)。
ContentProvider Timeout: ContentProvider的publish在10s内没进行完

二、如何尽量避免ANR?

  • 尽量避免在主线程(UI线程)中做耗时工作,耗时工作尽量放在子线程中

  • 尽量用Handler来处理UI Thread和别的Thread交互

  • 实在绕不开主线程,可以尝试通过Handler延迟加载;

  • 广播中如果有耗时操作,建议放在IntentService中去执行,或者通过goAsync() + HandlerThread分发执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值