獲取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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章