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的开源项目,来实现当短时间内程序发生几次崩溃,则删除某些数据以满足对程序的修复。

android 程序崩溃crash日志的捕捉的更多相关文章

  1. 捕android程序崩溃日志

    主要类别: package com.example.callstatus; import java.io.File; import java.io.FileOutputStream; import j ...

  2. Android程序崩溃异常收集框架

    最近在写Android程序崩溃异常处理,完成之后,稍加封装与大家分享. 我的思路是这样的,在程序崩溃之后,将异常信息保存到一个日志文件中,然后对该文件进行处理,比如发送到邮箱,或发送到服务器. 所以, ...

  3. Android 程序崩溃后的处理

    在应用发布以后,由于安卓机型的千差万别 ,可能会出现各种各样的问题,这时候如果我们可以将这些信息收集起来,并进行修改就很不错了.下面就来讨论一下怎么处理程序崩溃以后,错误信息的手机. Java中已经提 ...

  4. android程序崩溃后重启

    有时候由于测试不充分或者程序潜在的问题而导致程序异常崩溃,这个是令人无法接受的,在android中怎样捕获程序的异常崩溃,然后进行一些必要的处理或重新启动 应用这个问题困恼了我很久,今天终于解决了该问 ...

  5. 保存android程序崩溃日志到SD卡

    private boolean writeToSDCard(Throwable ex) { boolean isDealing = false; if (Environment.getExternal ...

  6. Android程序意外Crash后自动重启

    1.自定义UncaughtExceptionHandler public class UnCeHandler implements UncaughtExceptionHandler { private ...

  7. Windows Phone & Windows App应用程序崩溃crash信息抓取方法

    最近有用户反馈,应用有崩溃的情况,可是本地调试却无法重现问题,理所当然的,我想到了微软的开发者仪表盘,可以查看一段时间内的carsh记录,不过仪表盘生成carsh记录不是实时的,而且生成的报告查看非常 ...

  8. Android 程序崩溃之后fragment出现画面重叠问题

    1.解决方法: 直接在包含Fragment的Activity中复写onSaveInstanceState()方法,使其空实现 @Override protected void onSaveInstan ...

  9. Android程序崩溃异常处理框架

    目前我已经把框架放在了github了,地址如下:https://github.com/msdx/android-crash 使用方法见github上面的README.md. 本项目相关jar包已发布在 ...

随机推荐

  1. MacOS下使用VMware5 破解 安装win7 ISO 激活

    VMware5 下载 破解 以及win7 ISO版本的安装 激活VMware5 下载与破解参考方法http://www.macx.cn/thread-2060440-1-1.htmlVMware5 是 ...

  2. HDU2795 billboard【转化为线段树。】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 hhanger大神的题目,水题都得有点思维. 题意:h*w的木板,放进一些1*L的物品,求每次放 ...

  3. Andorid Binder进程间通信---Binder本地对象,实体对象,引用对象,代理对象的引用计数

    本文參考<Android系统源码情景分析>,作者罗升阳. 一.Binder库(libbinder)代码: ~/Android/frameworks/base/libs/binder --- ...

  4. js数组练习

    //查找数组对象中 age 大于 18 对象 function filterAdult(arr) { return arr.filter(function(item, index, array) { ...

  5. JavaScript 数字相关的转换和方法

    类型判断 isNaN - 是否是 NaN(Not a Number).主要用来判断 NaN 是否是 NaN,因为 NaN == NaN 是 false. isNaN(NaN);       // tr ...

  6. CSS中overflow:hidden

    CSS中,overfllow:hidden的作用是隐藏溢出 比如:<div style="width:300px;overflow:hidden" id=1><d ...

  7. SSIS 阻塞,半阻塞和全阻塞 (Non-blocking, semi-blocking and Fully-blocking) transformations清单

    三种Blocking类型,这里跟数据流的Buff关系很大:■■ non-blocking transformations,每一行直接转换输出,没有等待.■■ partial-blocking tran ...

  8. C++基础梳理--Class、Struct、Union

    C++学习一段时间后,反过头来看我发现我忘了一下最基础的东西:strcut(结构体),union(联合体)我学会了类的一堆东西却忘了这两个最基础的: 现在就好好的重新学习一下这里的东西: 一.Clas ...

  9. linux串口编程(c)

    //linux c: 串口设置//串口操作无非以下几个://1 打开                       //2 设置串口属性//3 read write //struct termios能够 ...

  10. BZOJ 1059: [ZJOI2007]矩阵游戏( 匈牙利 )

    只要存在N个x, y坐标均不相同的黑格, 那么就一定有解. 二分图匹配, 假如最大匹配=N就是有解的, 否则无解 ------------------------------------------- ...