如何在不打扰正常碰撞流量的情况下捕获碰撞

时间:2017-05-26 07:35:46

标签: android performance android-layout android-fragments crash

我知道已经有很好的工具,如crashlytics,但我有一个要求,我不能使用这些工具。

我需要的是在应用程序存在之前保存崩溃日志,并且不会干扰正常流程,并使用任何第三方库

我已经实现了这个,但它已经扰乱了android崩溃的正常流程。我想保存日志,但不想打扰正常的崩溃流程。

我正在做的是保存崩溃日志。

    public void registerCrash(){

        Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler()
        {
            @Override
            public void uncaughtException (Thread thread, Throwable e)
            {
                handleUncaughtException (thread, e);
            }
        });
    } 


    public void handleUncaughtException (Thread thread, Throwable e)
    {
        thread.getStackTrace();
        savePreferenceData(e.toString());
        System.exit(0);
    }


    public void savePreferenceData(String data) {
        SharedPreferences sharedPreferences= context.getSharedPreferences(LOG_DATA, Context.MODE_PRIVATE);
        SharedPreferences.Editor prefsEditor = sharedPreferences.edit();
        prefsEditor.putString(STACK_TRACE, data);
        prefsEditor.apply();
}

问题在于,它重新启动应用程序,而不向用户提供默认的Alert对话框。 Unfortunately App has stopped.

请指导我如何保存崩溃日志,以免扰乱正常的崩溃机制

1 个答案:

答案 0 :(得分:1)

在设置UncaughtExceptionHandler之前,跟踪之前设置的那个,并在完成后从您自己的处理程序中调用它:

private Thread.UncaughtExceptionHandler defaultExceptionHandler;

public void registerCrash(){
    defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();

    Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler(){
        @Override
        public void uncaughtException (Thread thread, Throwable e){
            handleUncaughtException (thread, e);
            if(defaultExceptionHandler != null){
                defaultExceptionHandler.uncaughtException(thread, e);
            }
        }
    });
}