zoukankan      html  css  js  c++  java
  • android 程序崩溃crash日志的捕捉

    android 程序崩溃crash日志的捕捉

    之前在项目开发过程中,一直会遇到程序崩溃了,但是测试組的哥哥们又没及时的导出日志....
    后来在诳群的时候听别人说起,腾讯有那么一个叫bugly的东西
    将其作为第三方jar文件引入其中,并且进行一些简单的配置即可:程序崩溃的crash日志会自动的上传到他腾讯那边给的后台上面,在线查看日志

    问题来了:

    • 怎么实现的呢
    • 为什么他们就可以去捕获那一段日志?
    • 程序不是已经崩溃了吗?
    • 获取日志的代码为啥还可以运行?

    原理

    搜索到这篇文章Android平台的崩溃捕获机制及实现
    这篇文章来自一个做这方面产品的大牛。下面对其中关于原理的描述做一些引用

    Java提供了一个接口给我们,可以完成这些,这就是UncaughtExceptionHandler,Uncaught异常发生时会终止线程,此时,系统便会通知UncaughtExceptionHandler,告诉它被终止的线程以及对应的异常,然后便会调用uncaughtException函数。如果该handler没有被显式设置,则会调用对应线程组的默认handler。

    原来这玩意是java做的活,是java对其线程出现unCaught异常进行捕获的处理,和android本身无关

    使用的注意点

    android应用中必须在Application中调用Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler);

    在java中,可以在任何的线程中调用setDefault方法。但是在android中不行,必须是在application中调用

    在Android应用程序中,全局的Application和Activity、Service都同属于UI主线程,线程名称默认为“main”。所以,在Application中应该为UI主线程添加UncaughtExceptionHandler,这样整个程序中的Activity、Service中出现的UncaughtException事件都可以被处理。

    如果多次调用setDefaultUncaughtExceptionHandler设置handler,以最后一次为准。

    将闪退信息存储到文件系统中。不能存到SharedPreferences中,因为打开SP需要使用一个新的线程(Android内部实现),而这在UnCaughtExceptionHandler中,这是不被允许的。

    Android实现多次闪退清除数据
    这篇文章里面的作者描述的是,用一个叫做acra的开源项目,来实现当短时间内程序发生几次崩溃,则删除某些数据以满足对程序的修复。

  • 相关阅读:
    C++builder 系统时间
    oracle 备份某张表
    Pascal 中对于常量的初始化
    Delphi 正则表达式
    Lazarus 中的字符串 String,AnsiString,UnicodeString,UTF8String,WideString
    Lazarus 指针,数组,字符串
    准备使用PostgreSQL
    Freepascal 中的泛型使用
    如何生成密钥文件Snk
    挖掘经典:几乎被人遗忘的HTML七种用法
  • 原文地址:https://www.cnblogs.com/zhou-guobao/p/5438167.html
Copyright © 2011-2022 走看看