Android卡顿优化--ANR

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();
                }
            }
        });


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

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

 

 

线上ANR监控方案

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

 

 

ANR-WatchDog

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

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

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

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

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

 

 

于 AndroidPerformanceMonitor 的区别

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值