获取Crash信息

通过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)的原理就是文章开头描述的,只是更加细化

发布了176 篇原创文章 · 获赞 28 · 访问量 22万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章