2015-03-03 3 views
2

Я создаю Launcher. Иногда у меня есть ошибки и, конечно, я должен их исправить, но я пытаюсь использовать UncaughtExceptionHandler для всего моего приложения.Android 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 исключения. Я не могу получить их, используя этот класс. Любая помощь?

+0

Вы пытались переопределить onCreate() вместо использования конструктора? (т. Е. Заменить 'public clsMyApplication()' на 'public void onCreate()') – Gorcyn

+0

Возможный дубликат [Использование глобальной обработки исключений на Android] (http://stackoverflow.com/questions/4427515/using-global-exception- обработка-на-андроиде) – Gorcyn

+0

Я пробовал, как вы и предложили, но это не сработало – Ton

ответ

0

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

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { 

     @Override 
     public void uncaughtException(Thread thread, Throwable t) { 
      //Do something 
     } 
    }); 
+0

Извините, все еще исправление – Ton

0

Я думаю, вероятно, что вы не обработать исключение в методе коррекции 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); 
    } 
} 
+0

Однако я не смог прочитать журналы ошибок в logcat, если я сделал это таким образом, в то время как вы можете найти журналы ошибок в вместо ошибки. – Snk

Смежные вопросы