CrashHandle捕获崩溃信息

来源:互联网 发布:青岛易亚网络骗局 编辑:程序博客网 时间:2024/05/16 17:38

程序的崩溃是不可避免的,我们有时需要手动捕捉这些崩溃信息,上传服务器。Android提供了扑捉crash的方法。在Thread类中,有一个方法setDefaultUncaughtExceptionHandler;

 /**     * Set the default handler invoked when a thread abruptly terminates     * due to an uncaught exception, and no other handler has been defined     * for that thread.     *  public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh) {         defaultUncaughtExceptionHandler = eh;     }

当Crash信息发生的时候,系统会会掉UncaughtExceptionHandler的uncaughtException方法,在这个方法中可以获取到新的异常信息。在这里我们可以处理我们的逻辑了。

下面的demo 是在手机端观看奔溃信息:

public class CrashHandle implements Thread.UncaughtExceptionHandler {    Thread.UncaughtExceptionHandler mExceptionHandler;    private Context mContext;    public CrashHandle(Context context) {        mContext = context;        mExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();        Thread.setDefaultUncaughtExceptionHandler(this);    }    @Override    public void uncaughtException(Thread t, Throwable e) {        //系统默认处理//        if (null != mExceptionHandler) {//            mExceptionHandler.uncaughtException(t, e);//        }        StringWriter mStringWriter = new StringWriter();        PrintWriter mPrintWriter = new PrintWriter(mStringWriter);        e.printStackTrace(mPrintWriter);        String crashContent = mStringWriter.toString();        //可以封装成文件创上传服务器或者先保存在sdcard.我这里是跳转到一个界面,在手机端显示错误信息。        Intent mIntent = new Intent(mContext, BugReportActivity.class);        mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);        mIntent.putExtra(BugReportActivity.CRASH_CONTENT, crashContent);        mContext.startActivity(mIntent);        System.exit(0);    }}
public class BugReportActivity extends Activity {    public static final String CRASH_CONTENT = "crash";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_bug_report);        TextView mCrash = (TextView) findViewById(R.id.tv_show_crash_message);        String message = getIntent().getStringExtra(CRASH_CONTENT);        mCrash.setMovementMethod(ScrollingMovementMethod.getInstance());        mCrash.append(message);    }}public class AlgorithmApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        Thread.setDefaultUncaughtExceptionHandler(new CrashHandle(this));    }}

不要忘记在manifest添加:BugReportActivity




原创粉丝点击