2016-12-26 2 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 Studio обыкновение компиляции, потому что нету поймал throw e линию. Что я делаю?

PS2: Я работал над ограничением Android Studio, заменяя throw e на throw new RuntimeException(e);, но это правильный путь для решения моего основного вопроса?

ответ

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(); 
        } 
       } 

      } 
     }); 
Смежные вопросы