奔溃优化上

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

    原文作者:尾戒U
    原文地址: https://www.jianshu.com/p/1223fa97fd70
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞