2013-07-17 3 views
3

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

Причина: мы можем синхронизировать содержимое локальной базы данных с сервером. И у нас есть веские причины, позволяющие этой операции, только в состоянии 1, основного действия, а не в состоянии 2. Однако, если пользователь обнаруживает некоторую связанную с db семантическую ошибку в программе, в состоянии 2 основного действия, то он или она может застрять там.

Мы готовы к прерыванию входящего вызова и другим изменениям конфигурации, поэтому, если приложение застряло в состоянии 2, то принудительное закрытие приложения, а затем повторное его открытие, все равно оставит пользователя на этапе 2 вместо Этап 1.

Итак, мы хотим оставить способ для пользователя после того, как сила закрыта, чтобы вернуться на этап 1, и иметь возможность синхронизировать базу данных, поэтому большинство его или ее работ можно сохранить ,

ответ

3

К сожалению, нет способа. Когда пользователь или системная сила останавливают приложение, весь процесс просто убивается. Нет обратного вызова, чтобы сообщить вам, что это произошло. Не может быть вызвано даже onDestroy(). Это задокументировано в документации: "There are situations where the system will simply kill the activity's hosting process without calling this method (or any others) in it ..."

+0

А что насчет 'getRuntime(). addShutdownHook' или что-то в этом роде. Я знаю, что «на Android жизненный цикл приложения не включает завершение VM, поэтому вызов этого метода не гарантирует, что ваш код запущен», но никто не говорит мне, когда он вызван ... Не существует метода, который я мог бы использовать ? – Hegi

+0

@Hegi Как я уже сказал, нет гарантированного способа и никакого метода для этой цели. –

0

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

+0

Для правильного ответа на этот вопрос вы должны определить «выключение» на ОС Android – Selvin

+0

Это была моя первоначальная идея, но, как упоминалось выше, единственный гарантированный метод, который называется onPause, и к сожалению, этот метод также вызывается, когда пользователь нажимает домашний ключ – Hegi