Android вернется к предыдущему действию, если произойдет сбой другого действия

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

2 ответа

Решение

Вы можете попробовать использовать Thread.setDefaultUncaughtExceptionHandler получать уведомление, когда какой-либо поток умер из-за необработанного исключения. Но я не уверен в реализации этого механизма в Dalvik. Возможно, вы не сможете начать другое действие с UncaughtExceptionHandler поскольку документация ничего не говорит о воскресении потока / процесса.

Обновить

Хорошо. Я проверил это, и теперь я уверен, что вы НЕ сможете вернуться к предыдущему действию, используя описанную выше технику, если ваше приложение сгенерировало исключение в потоке пользовательского интерфейса. Это происходит потому, что это исключение приведет к выходу из главного петлителя приложения и, следовательно, ваше приложение не сможет обрабатывать дальнейшие сообщения пользовательского интерфейса.

Единственный возможный способ добиться того, чего вы хотите, - это грязный взлом:

public class MyApplication extends Application {

  @Override
  public void onCreate() {
    super.onCreate();
    while (true) {
      try {
        Log.i("MyLooper", "Starting my looper");
        Looper.loop();
      } catch (Exception e) {
        Log.e("MyLooper", "Caught the exception in UI thread, e:", e);
        showPreviousActivity();
      }
    }
  }

  private void showPreviousActivity() {
    // your implementation of showing the previous activity
  }   
}

И зарегистрируйте MyApplication в своем AndroidManifest.xml:

<application android:name=".MyApplication">
…

Реализация showPreviousActivity() Метод зависит от вас. Одним из возможных решений было бы отслеживать текущий экземпляр Activity в некотором классе ActivityTracker и вызывать текущую активность finish() метод из showPreviousActivity код.

Использовать try-catch блок, чтобы поймать исключение и startActivity там. Вы не можете перейти к другому занятию, не поймав его.

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