2015-05-04 2 views
1

Что я хочу сделать, закройте все открытые действия, когда есть необработанное исключение.
У меня есть BaseActivity, который является базовым для всех видов деятельности в моем приложении и всех видов деятельности, полученных из этого класса.
Я позвонил setDefaultUncaughtExceptionHandler в onCreate из BaseActivity.Закрытие всех открытых действий, когда `uncaughtException` называется

У меня есть BaseActivity, как показано ниже:

public abstract class BaseActivity extends Activity 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     // Exceptions that are not handled are received in GlobalExceptionHandler class    
     Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler()); 
    } 

    public class MyExceptionHandler implements UncaughtExceptionHandler 
    { 
     @Override 
     public void uncaughtException(Thread thread, Throwable e) 
     { 
      String report = ""; 

      // Code to generate report string 
      ...... 
      // Code to generate report string 

      // Start error screen 
      Intent intent = new Intent(mContext, ErrorScreen.class); 
      intent.putExtra("error", report); 
      intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
      intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(intent); 

      // Exit 
      System.exit(0); 
     } 
    } 
} 

Вот мой ErrorScreen активность:

public class ErrorScreen extends Activity implements OnClickListener 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.error_screen_layout); 

     // Display error report from intent 
    } 

    @Override 
    public void onClick(View view) 
    { 
     switch(view.getId()) 
     { 
      case R.id.btn_exit_app: 
      { 
       // All this is not working 
       // and few activities are still there 
       finish(); 

       android.os.Process.killProcess(android.os.Process.myPid()); 

       System.exit(1); 
      } 
      break; 
     } 
    } 
} 

На любом unhandeled исключением, моя uncaughtException функция вызывался, который, как ожидалось, то я начинаю новую активность для отображения информации об ошибке и кнопку для выхода в ErrroScreen.

Но проблема в том, что после того, как вы выбрали кнопку выхода из приложения, не все действия в приложении закрываются, все еще есть несколько открытых действий, как закрыть все открытые действия?

ответ

0
private Thread.UncaughtExceptionHandler androidDefaultUEH; 

private Thread.UncaughtExceptionHandler handler = new Thread.UncaughtExceptionHandler() { 
    public void uncaughtException(Thread thread, Throwable ex) { 
     //mInstance.startActivity(new Intent(mInstance, HomeActivity.class)); 
     Log.e("TestApplication", "Uncaught exception is: ", ex); 
     // here I do logging of exception to a db 
     Toast.makeText(getApplicationContext(), "Something went wrong..... TimesNow App is restarting...", Toast.LENGTH_SHORT).show(); 

     PendingIntent myActivity = PendingIntent.getActivity(getApplicationContext(), 
       192837, new Intent(getApplicationContext(), ToBeOpenedActivity.class), 
       PendingIntent.FLAG_ONE_SHOT); 

     AlarmManager alarmManager; 
     alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       15000, myActivity); 
     System.exit(0); 

     androidDefaultUEH.uncaughtException(thread, ex); 
    } 
}; 

Написать этот метод в своем классе приложения ..

+0

Но я не хочу, чтобы автоматически перезагрузить приложение через 15000 мс, и я не хочу, чтобы отобразить только Тост. я просто хочу закрыть все открытые действия. это оно. – User7723337

+0

означает, что вы хотите закрыть приложение? – Android

+0

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