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
там. Вы не можете перейти к другому занятию, не поймав его.