卡顿
3.卡顿监控
卡顿:卡顿阀值设置为主线程执行消息队列中的消息时间超过200ms认为主线程卡顿
频繁GC操作也会造成卡顿,申请内存时内存不足会触发GC,所以不合理的内存使用也会造成卡顿
实现原理:开启子线程执行,会消耗cpu资源,谨慎开启,开发中一般针对部分用户下发开关
-
1 设置Looper.setPrinter(自定义printer)实现println方法;
-
2 在消息执行前后,Looper会调用
Looper.mPriter.pritlin(“>>>>> dispatch msg.target msg.callBack,msg.what”)//子线程开启收集线程堆栈信息
Looper.mPriter.pritlin(“<<<<<< finish msg.target msg.callBack,msg.what”)//子线程结束收集线程堆栈信息 -
3首先需要判断msg.target的Looper是否等于主线程的Looper mH
-
其次计算这两个函数前后时间差是否超过200ms超过的话就上报堆栈调用信息。
Crash,ANR,卡顿最难的是异常信息的收集上传,收集到信息后可以根据日志进行分析进而解决问题。信息(一般是将日志保存在本地,有效期限是七天)上传一般都是通过开关动态下发的,目的是为了节省带宽和服务端的存储压力。千万级的用户数据量会很大。
在灰度期间重点观察指标是否正常,如果正常扩大灰度继续观察,不正常的话就停止灰度。然后定位问题是升级还是采用热修复。
网友评论