Мне нужно определить, было ли мое приложение принудительно закрыто, аварийно завершено или завершено нормально. Мой вопрос: как бы вы сделали это в среде Android. Обработка исключений проста, мне нужно только заменить Thread.setDefaultExceptionHandler. Трудная часть: как я могу отличить принудительное закрытие от «нормального» (например, обратное нажатие или кнопка «Домой» + много времени и т. д.)?
Причина в том, что мы можем синхронизировать содержимое локальной базы данных с сервером. И у нас есть веские причины разрешить эту операцию только в состоянии 1 основного действия, а не в состоянии 2. Однако, если пользователь обнаружит в программе некоторую семантическую ошибку, связанную с базой данных, в состоянии 2 основного действия, тогда он или она может застрять там.
Мы готовы к прерыванию входящего вызова и другим изменениям конфигурации, поэтому, если приложение застревает в состоянии 2, принудительное закрытие приложения, а затем его повторное открытие все равно оставит пользователя на этапе 2, а не на этапе 1.
Таким образом, мы хотим предоставить пользователю возможность вернуться на этап 1 после принудительного закрытия и иметь возможность синхронизировать базу данных, чтобы большую часть его или ее работы можно было сохранить.