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. 转: sublime text常用插件和快捷键

    Sublime Text 2是一个轻量.简洁.高效.跨平台的编辑器.博主之前一直用notepdd++写前端代码,用得也挺顺手了,早就听说sublime的大名,一直也懒得去试试看,认为都是工具用着顺手就 ...

  2. cocos2d-x 源代码 :可以循环CCScrollView (,代码已被重构连接使用)

    cocos2d-x来源合计文件夹 http://blog.csdn.net/u011225840/article/details/31743129 1.准备工作 想弄懂可循环的CCscrollView ...

  3. block 解析 - 局部变量

    局部变量 block内使用局部变量,一般都是截获变量(只读),截获离block初始化最近的一次的值. 引用官方文档: Stack (non-static) variables local to the ...

  4. Android 中文API (65) —— BluetoothClass[蓝牙]

    前言 本章内容是android.bluetooth.BluetoothClass,为Android蓝牙部分的章节翻译.用于描述远端设备的类型,特点等信息,通过getBluetoothClass()方法 ...

  5. MVC表单提交加JS验证

    做一个普通表单提交,但是要加前端验证,如下: 1. Action public ActionResult Add(ProductModelproductID) {     //operate... } ...

  6. LeetCode:链表排序

    Sort a linked list in O(n log n) time using constant space complexity. public class Solution { publi ...

  7. lightOJ 1317 Throwing Balls into the Baskets

    lightOJ  1317  Throwing Balls into the Baskets(期望)  解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/ ...

  8. Notepad++中Windows,Unix,Mac三种格式

    Notepad++中Windows,Unix,Mac三种格式之间的转换 http://www.crifan.com/files/doc/docbook/rec_soft_npp/release/htm ...

  9. ibatis缓存配置

    一.sqlmapconfig.xml <sqlMapConfig> <settings useStatementNamespaces="true"  cacheM ...

  10. 关于MooTools你应该熟知的6个基本知识

    MooTools是一个精简.模组化同时也面向对象的JavaScript框架,它设计给中等和进阶的JavaScript开发人员使用.使用 MooTools优美.详细而条理分明的API,可让你写出强大.富 ...