2016-12-26 37 views
0

在我的应用程序崩溃记录服务(splunk mint)正在崩溃大时间。 我正在设置UncaughtExceptionHandler(因为我没有权力通过崩溃日志库),以便我可以捕获这些崩溃并防止应用程序崩溃,因为崩溃日志库。如何使用这个所有崩溃捕获的代码只处理单一类型的崩溃

但我只想抓住这些与UncaughtExceptionHandler特定的崩溃,而不是在应用程序中的所有崩溃。

我有这段代码,你能告诉我如果任何异常不包含单词splunk.mit被捕获,我该如何让应用程序崩溃?

public class MyApplication extends Application 
{ 
    public void onCreate() 
    { 
    // Setup handler for uncaught exceptions. 
    Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler() 
    { 
     @Override 
     public void uncaughtException (Thread thread, Throwable e) { 
     // todo check if stacktrace contains `splunk.mint` 
     // todo let all other crashes crash the app 

     handleUncaughtException (thread, e); 
     } 
    }); 
    } 

    public void handleUncaughtException (Thread thread, Throwable e) { 
    e.printStackTrace(); 
    // todo deal with the crash somehow 
    } 
} 

PS:请问这有诀窍吗?

Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler() 
    { 
     @Override 
     public void uncaughtException (Thread thread, Throwable e){ 
      if (!Arrays.toString(e.getStackTrace()).contains("splunk.mint")) { 
       throw e; 
      } 
     } 
    }); 

其实我试图测试,但Android的工作室不会编译,因为我还没有抓到throw e线。我该怎么办?

PS2:我通过替代throw ethrow new RuntimeException(e);解决了Android Studio的限制,但是这是否正确地解决我的主要问题?

回答

1

你可以尝试这样的事情:

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { 

      @Override 
      public void uncaughtException(Thread t, Throwable e) { 
       if(e instanceof SplunkException){ 
        //handle exception 
        System.out.println(e.toString()); 
       }else{ 
        try { 
         throw e; 
        } catch (Throwable e1) { 

         e1.printStackTrace(); 
        } 
       } 

      } 
     });