Android: onDestroy() или аналогичный метод в классе Application

Я расширяю класс Application для работы с некоторыми глобальными переменными, которые нуждаются в контексте. Я знаю, что в классе Application есть метод onCreate(), который вызывается перед любым другим onCreate() в действии, но Я хотел бы знать, существует ли onDestroy() или аналогичный метод в классе Application, который может быть переопределен, чтобы я мог хранить переменные в постоянной памяти, отменить регистрацию и отправить последнее сообщение на сервер до того, как процесс приложения будет убит? Если нет, есть ли другой способ сделать это?

Ответ 1

Нет такого вызова на производственном устройстве для класса Application.

То, что вы хотите сделать, обычно должно выполняться сразу после внесения изменений или в onPause() соответствующего компонента приложения.

Ответ 2

В андроиде нет концепции закрытия приложения. Пользователь просто уходит: это единственное событие, о котором вам будет известно (onPause() в действии). Вы должны адаптировать свой дизайн приложения в соответствии с этим жизненным циклом.

Вы не должны пытаться найти обходной путь, это может только ухудшить ситуацию: что, если у пользователя заканчивается заряд батареи или если ваше приложение падает? все данные будут потеряны. Я не знаю, с какими данными вы работаете, но обычно это приводит к плохой оценке в Google Play. Даже если что-то плохое, все данные уже должны быть сохранены (AsyncTasks отлично подходят для этого, не бойтесь начинать с каждого изменения, чтобы постоянно сохранять данные).

Ответ 3

Прежде всего: я абсолютный новичок

Мне нужно выполнить некоторый код, когда мое приложение выйдет (да, я не знаю, что такое в Android), и это работает нормально для меня:

- У меня есть приложение MyApplication, расширяющее приложение. В качестве члена MyApplication имеется поле AtomicInteger с именем activeActivitiesNumber и общедоступным методом getter.

- Все действия приложения расширяют MyActivy (который сам расширяет Activity)

-MyActivity переопределяет onCreate, onResume и onStop методы, а также имеет защищенное поле: Protected MyAppication mAppState;

a) OnCreate(){
super.onCreate();
mAppState=this.getApplication();...}


b) onResume(){
super.OnResume();
myAppState.getactiveActivitiesNumber().addAndGet(1)
....}

c) onStop(){
super.onStop()

if (myAppStatemyAppState.getactiveActivitiesNumber()..decrementAndGet()<1){
...call exiting code (for instance a public method defined in MyApplication}
}

У этого есть проблема: если вы начинаете какую-либо деятельность, tan не принадлежит вашему приложению (например, отправляет электронное письмо), он упустит метод exiting.

Еще одна проблема (не знаю, является ли она реальной теоретической) заключается в том, что в некоторых ситуациях не будет гарантированного загара, на который будет вызываться onStop.

Надеюсь на эту помощь.

Ответ 4

Другой вариант, который у вас есть, - переопределить onDestroy() на первом экране вашего приложения, поэтому он будет вызываться прямо перед тем, как ваш процесс будет убит!