ANR治理
- 大纲
1 | anr是什么? |
- anr是什么?
anr(Applicatipon No Response),即应用无响应;本质是一个性能问题;在用户和app进行交互时,常会遇到长时间无响应/卡顿的场景;为了改善性能,Android设计了anr的机制,即保证交互能在一定时间内完成,如果未完成,就抛出异常,也就是ANR;
- anr设计机制:
是系统通过与之交互的组件(Activity,Service,Receiver,Provider)以及用户交互(InputEvent)进行超时监控,以判断应用进程(主线程)是否存在卡死或响应过慢的问题,通俗来说就是很多系统中看门狗(watchdog)的设计思想。
- 不同的组件,系统设置的超时时间是不同的,这个时间不同手机厂商的os可能也会做调整:
- 系统抛出anr的机制:
在进行相关的操作前,系统会基于当前的时间戳和这个类型组件的超时时间设置,计算出超时时间戳;并将超时时间戳传递给anr触发函数,组件若未超时启动,则会在启动成功后,在传递一个参数给anr函数来阻止触发anr;若到超时时间,anr函数还未收到阻止信号,就会触发ANR(类似构建了个定时触发的任务);
- 超时触发流程如下:
- 不同的组件,系统设置的超时时间是不同的,这个时间不同手机厂商的os可能也会做调整: