Android UncaughtExceptionHandler не работает

Я создаю лаунчер. Иногда у меня возникают ошибки, и, конечно, я должен их исправить, но я пытаюсь использовать UncaughtExceptionHandler для всего своего приложения.

Для этого я использую этот класс:

  public class clsMyApplication extends Application 
  {
     // uncaught exception handler variable
     private UncaughtExceptionHandler defaultUEH;

     // handler listener
     private Thread.UncaughtExceptionHandler _unCaughtExceptionHandler = new Thread.UncaughtExceptionHandler() 
     {  @Override public void uncaughtException(Thread thread, Throwable ex) 
        {
           try
           {  Save a log file with the error and 
              save preferences indicating there was an error to display the next start up.
           }
           catch(Exception e)
           {

           }



           //Alarm to restart app:
           PendingIntent myActivity = PendingIntent.getActivity(clsMyApplication.this, 192837, new Intent(clsMyApplication.this, clsMyMainActivity.class), PendingIntent.FLAG_ONE_SHOT);
           AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
           alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 5000, myActivity );
           System.exit(2);


           // re-throw critical exception further to the os (important)
           defaultUEH.uncaughtException(thread, ex);
        }
     };

     public clsMyApplication() 
     {  
        defaultUEH = Thread.getDefaultUncaughtExceptionHandler();

        // setup handler for uncaught exception 
        Thread.setDefaultUncaughtExceptionHandler(_unCaughtExceptionHandler);      
     }


  }

Я также добавляю этот класс в манифест следующим образом:

<application       
    android:name=".clsMyApplication"         
    ....

Но я все еще получаю исключения Android. Я не могу заставить их использовать этот класс. Любая помощь?


person Ton    schedule 03.03.2015    source источник
comment
Вы пытались переопределить onCreate() вместо использования конструктора? (т.е. заменить public clsMyApplication() на public void onCreate())   -  person Gorcyn    schedule 03.03.2015
comment
возможный дубликат Использование глобальной обработки исключений на Android   -  person Gorcyn    schedule 03.03.2015
comment
Я попробовал как вы посоветовали, но это не сработало   -  person Ton    schedule 03.03.2015


Ответы (2)


Добавьте эту строку кода внутрь любого метода (желательно внутри действия OnCreate).

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {

        @Override
        public void uncaughtException(Thread thread, Throwable t) {
            //Do something
        }
    });
person programmer23    schedule 03.03.2015
comment
Извините, все еще не получается - person Ton; 03.03.2015

Я предполагаю, что вы не обработали исключение в методе переопределения uncaughtException(Thread thread, Throwable t){}

В моем проекте я обычно обрабатывал эти неожиданные исключения здесь, а не в системе.

@Override
public void uncaughtException(Thread thread, Throwable ex) {
    if (!handleException(ex) && mDefaultHandler != null) {
        // default exception handler
        mDefaultHandler.uncaughtException(thread, ex);
    } else {
        // exit program
        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(0);
    }
}
person Snk    schedule 10.04.2015
comment
Однако я не смог бы прочитать журналы ошибок в logcat, если бы сделал это таким образом, в то время как вы можете найти журналы ошибок в предупреждении вместо ошибки. - person Snk; 10.04.2015