2016-12-26 42 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(); 
        } 
       } 

      } 
     });