Android 如何在不干扰正常碰撞流的情况下捕获碰撞
我知道已经有好的工具可用,比如Android 如何在不干扰正常碰撞流的情况下捕获碰撞,android,performance,android-layout,android-fragments,crash,Android,Performance,Android Layout,Android Fragments,Crash,我知道已经有好的工具可用,比如crashlytics,但是我有一个要求,我不能使用这些工具 我所需要做的就是在应用程序存在之前保存崩溃日志,并且在不干扰正常流程的情况下,使用任何第三方库 我已经实现了这个,但是它扰乱了android崩溃的正常流程。我想保存日志,但不想干扰正常的崩溃流 这就是我正在做的,以保存崩溃日志 public void registerCrash(){ Thread.setDefaultUncaughtExceptionHandler (new T
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();
}
问题在于,它会重新启动应用程序,而不会向用户提供默认的警报对话框<代码>不幸的是,应用程序已停止。
请指导我如何在不干扰正常碰撞机制的情况下保存碰撞日志在设置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);
}
}
});
}
谢谢,让我试试这个。这是将崩溃的东西带入循环,它第一次崩溃,它进入handleUnCaughException,然后检查
defaultExceptionHandler!=null
,这是真的,它会转到defaultExceptionHandler.uncaughtException
,它将程序带入循环。然后您可能会多次调用该方法,从而使用您自己的UncaughtExceptionHandler作为默认方法。当我们发生多个崩溃时,问题就会出现,在这种情况下,它会进入循环。有些情况下会发生3次或4次崩溃,比如说,Map Fragment
崩溃了,包含它的活动也随之崩溃,而承载引用的其他活动也会崩溃。在本例中,有3次崩溃,该逻辑进入循环。如果有一个崩溃,它可以正常工作。只有在多次调用该方法时才会发生这种情况。如果(defaultExceptionHandler==null){defaultExceptionHandler=Thread.getDefaultUncaughtExceptionHandler();},请尝试执行null检查