Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在不干扰正常碰撞流的情况下捕获碰撞_Android_Performance_Android Layout_Android Fragments_Crash - Fatal编程技术网

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检查