Я расширяю класс Application для работы с некоторыми глобальными переменными, которые нуждаются в контексте. Я знаю, что в классе Application есть метод onCreate(), который вызывается перед любым другим onCreate() в действии, но Я хотел бы знать, существует ли onDestroy() или аналогичный метод в классе Application, который может быть переопределен, чтобы я мог хранить переменные в постоянной памяти, отменить регистрацию и отправить последнее сообщение на сервер до того, как процесс приложения будет убит? Если нет, есть ли другой способ сделать это?
Android: 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() на первом экране вашего приложения, поэтому он будет вызываться прямо перед тем, как ваш процесс будет убит!