2015-01-27 2 views
0

В настоящее время, чтобы узнать, когда мое приложение выходит, я использую onDestroy() для выполнения кода, который закрывает и сокеты и отключает Bluetooth. Теперь единственная проблема заключается в том, что onDestroy() не всегда вызывается, поэтому на удаленное устройство не может быть отправлен сигнал, что приложение выходит, а Bluetooth не отключается. Кто-нибудь знает, каким образом я могу узнать, выходит ли приложение в 100% случаев?Android обнаруживает, когда активность разрушена

ответ

0

Android предоставляет вам звонок onPause(). onStop() и onDestroy() не предоставляются. Поместите свой код в onPause() и onResume().

+0

Это работает при условии, что существует одно действие. – dharms

+0

@dcharms OP запросил действия (из названия), поэтому я не понимаю вашего комментария – greywolf82

+0

OP хочет знать, когда приложение закрывается, а не активность. 'onPause' будет вызываться, когда пользователь переходит к другому действию, а не только когда приложение закрыто. – dharms

0

Это зависит от того, что вы определяете как «когда мое приложение выходит». Были ли прочитанный через эту страницу для получения дополнительной информации: http://developer.android.com/training/basics/activity-lifecycle/starting.html

Я хотел бы предложить размещение кода в onPause()

+0

Но всякий раз, когда onPause называется, он отключает bluetooth, и это дорогостоящая операция для включения, отправки данных для входа, возобновления и последующего отключения. Когда я подразумеваю вывод, я имею в виду, когда приложение удаляется из памяти. Например, когда вы удаляете его с фоновых приложений на странице – TameHog

+0

Но разве он не будет разряжать батарею, чтобы оставить bluetooth? –

0

Один популярный метод для отслеживания деятельности OnPause() и onResume() обратные вызовы и имеют GlobalFlag как " appActivityStarted». Затем реализовать следующий алгоритм:

  • в OnPause() установлен appActivityStarted = ложь и запустить таймер поток, который будет таймаут как после 5 секунд
  • в onResume() устанавливают appActivityStarted = истинным и отменить таймер
  • , если возникает тайм-аут (не был отменен) -> если (appActivityStarted == ложь), то вы должны делать то, что вам нужно сделать на приложение остановить
  • не забудьте соответствующую синхронизацию на чтение/установка флага

Я широко протестировал этот подход и не обнаружил никаких проблем с ним.

Смежные вопросы