ANR

 

分类

(1)KeyDispatchTimeout,5s

(2)BroadcastTimeout,前台10s,后台60s

(3)ServiceTimeout,前台20s,后台200s

 

ANR执行流程

(1)发生ANR

(2)进程接受异常终止信号,开始写入进程ANR信息

(3)弹出ANR提示框(ROM表现不一)

 

ANR解决套路

(1)线下分析,使用如下命令:

adb pull data/anr/traces.txt  存储信息

然后分析:CPU,IO,锁

 

模拟由锁冲突导致的ANR

        // 以下代码是为了演示Msg导致的主线程卡顿
        new Handler().post(new Runnable() {
            @Override
            public void run() {
                LogUtils.i("Msg 执行");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });


// 然后,在主线程中获取锁

Android卡顿优化--ANR

使用命令: “ adb pull ” 导出文件。

Android卡顿优化--ANR

 

 

线上ANR监控方案

(1)通过FileOberver监控文件变化,高版本权限问题

 

 

ANR-WatchDog

(1)非侵入式的ANR监控组件

(2)弥补高版本无权限问题

(3)网站:https://github.com/SalomonBrys/ANR-WatchDog

这个代码的原理是:每隔5秒,向主线程发生一个加一的操作,如果主线程卡住了,那么就不能加一,于是报错。

使用这种方法,能检测出,具体是哪一行。

Android卡顿优化--ANR

 

 

于 AndroidPerformanceMonitor 的区别

(1)AndroidPerformanceMonitor 监控主线程每个 msg 的执行

(2)ANR-WatchDog:看最终结果

结论:前者适合监控卡顿,后者适合补充ANR监控

相关文章: