我知道已经有很好的工具,如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.
请指导我如何保存崩溃日志,以免扰乱正常的崩溃机制
答案 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);
}
}
});
}