Перезапустите приложение Android после сбоя

Я хочу перезапустить приложение Android после сбоя. Моя проблема заключается в том, что он также перезапускается, когда я хочу закрыть приложение вручную, вызывая метод: finish();

PendingIntent _pendingInt;

 @Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
    setContentView(R.layout.readings_main);

//create pending intent, which starts the Application
    this._pendingInt=PendingIntent.getActivity(MyApplication.getInstance().getBaseContext(), 0,
            new Intent(getIntent()), getIntent().getFlags());
    // start handler which starts pending-intent after Application-Crash
    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(this._pendingInt, this.getApplicationContext()));
}

И мой CustomExceptionHandler:

public class CustomExceptionHandler implements UncaughtExceptionHandler {

private PendingIntent _penIntent;
Context cont;

/**
 * Constructor
 * @param intent
 * @param cont
 */
public CustomExceptionHandler(PendingIntent intent, Context cont) {
    this._penIntent = intent;
    this.cont=cont;
}

public void uncaughtException(Thread t, Throwable e) {
    AlarmManager mgr = (AlarmManager) cont.getSystemService(Context.ALARM_SERVICE);
    mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 60000, this._penIntent);
    System.exit(2);
}
}

Итак, когда я звоню через Menu-Option finish(), приложение запускается через 1 мин.

1 ответ

Решение

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

Я не эксперт в этом, но я предполагаю, что указание пользовательского обработчика исключений задерживает удаление системой вашего приложения до тех пор, пока оно не сможет вызвать onDestroy(). Это означает, что вы проходите один и тот же жизненный цикл независимо от того, как заканчивается ваша активность.

Возможно, есть способ обойти это. Вы можете определить, что ваше приложение заканчивает работу, вызвав onFinishing() в onPause(). Если вы отключите customExceptionHandler в этот момент, он не будет пытаться перезапустить приложение.

Другие вопросы по тегам