奔溃优化上
1、Native崩溃,native代码访问非法地址,也可能对齐出现了问题或者发生了程序主动abort,产生了相应的signal信号导致程序异常退出。
2、UV 奔溃率 = 发生奔溃的UV / 登录UV
3、一般app都会使用“安全模式”来保障客户端启动流程
4、一般处理ANR的两种方式:
(1)使用FileObserver监听 /data/anr/traces.txt的变化,但是在高版本的ROM中已经没有权限去访问这个文件。
(2)监控消息队列的运行时间(但是不太准确,一般比较多的是用于判断卡顿 blockcanary就是使用这个方法)
使用这个方法的原理是:
Loop.getMainLooper().setMessageLogging(Printer printer)方法。在Loop.loop()方法中有这样一段
for(;;){
......
final Printer logging = me.mLogging;
if (logging !=null) {
logging.println(">>>>> Dispatching to " + msg.target +" " +
msg.callback +": " + msg.what);
}
......
if (logging !=null) {
logging.println("<<<<< Finished to " + msg.target +" " + msg.callback);
}
......
}
5、UV 异常率 = 发生异常退出或者奔溃的UV / 登录UV
6、异常退出一般有5种:(1)主动自杀(Process.killProcess()、exit() 等);(2)奔溃(出现了Java或者Native奔溃);(3)系统重启(系统出现异常、断电、用户主动重启等,我们可以通过比较应用开机运行时间是否比之前记录的值更小);(4)被系统杀死(被 low memory killer 杀掉、从系统的任务管理器中划掉);(5)ANR。一般统计(3)、(4)、(5)
7、课后作业:BreakPad