获取Crash信息

来源:互联网 发布:淘宝双11外围有效果吗 编辑:程序博客网 时间:2024/06/07 13:35

通过Thread.setDefaultUncaughtExceptionHandler( );可以修改系统默认的异常处理器,从而捕获到崩溃信息

以下给出一个简单的例子来说明:

CrashHandler.java
package com.qunar.yuzhiyun.crashhandler;import android.util.Log;/** * 自定义系统异常处理器 * Created by yuzhiyun on 17/7/27. */public class CrashHandler implements Thread.UncaughtExceptionHandler {    private  static  CrashHandler sInstance=new CrashHandler();    /**     * 当系统发生未被捕获的异常后,会回调这个函数     * @param thread     * @param throwable     */    @Override    public void uncaughtException(Thread thread, Throwable throwable) {        Log.e("CrashHandler","I catch an uncaughtException");    }    public static CrashHandler getsInstance() {        return sInstance;    }    /**     * 把本身设置为Thread的默认异常处理器     */    public   void init(){        Thread.setDefaultUncaughtExceptionHandler(this);    }}

当然在uncaughtException 中,我们应该把崩溃信息写进sd卡,然后寻找合适的时机上传错误信息到我们的服务器

App.java
package com.qunar.yuzhiyun.crashhandler;import android.app.Application;/** * Created by yuzhiyun on 17/7/27. */public class App extends Application {    @Override    public void onCreate() {        super.onCreate();        CrashHandler crashHandler=CrashHandler.getsInstance();        crashHandler.init();    }}
MainActivity.java
package com.qunar.yuzhiyun.crashhandler;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.View;import android.view.Menu;import android.view.MenuItem;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);        fab.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {               throw new RuntimeException(" I throw a exception");            }        });    }}

关于开源crash信息收集框架

https://github.com/acra
acra(Application Crash Report For Android)的原理就是文章开头描述的,只是更加细化

原创粉丝点击