Android9.0 framework层BroadcastReceiver引起ANR的原理分析

1.前言


  Android系统中,在app中进行一些操作时,系统中的ActivityManagerService(简称AMS)和WindowManagerService(简称WMS)会在app进行操作app时,
检测App的响应时间,如果App在特定时间无法响应屏幕触摸或键盘输入时间,或者特定事件没有处理完毕,就会出现ANR。
以下四个情况都可以造成ANR发生:

    1.InputDispatching Timeout:在app进行操作时,在主线程中5秒内无法响应屏幕触摸事件或键盘输入事件

    2.BroadcastQueue Timeout :在app内执行前台广播(BroadcastReceiver)的onReceive()函数时在主线程中10秒没有处理完成,后台为60秒。

    3.Service Timeout :在系统Service的生命周期的函数中在特定时间内(前台服务20s,后台服务200s)在主线程中无法完成响应。

    4.ContentProvider Timeout :ContentProvider的publish在主线程中在10s内没进行完。
    (进程启动过程中,如果发生会直接杀进程以及清理相应信息,而不会弹出ANR的对话框)
接下来就来分析在主线程中BroadcastReceiver造成阻塞输入无响应的分析

2.framework层BroadcastReceiver引起ANR的原理分析的核心类

frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
frameworks/base/services/core/java/com/andro

猜你喜欢

转载自blog.csdn.net/baidu_41666295/article/details/131494569