Ответ 1
Нет такого вызова на производственном устройстве для класса Application.
То, что вы хотите сделать, обычно должно выполняться сразу после внесения изменений или в onPause()
соответствующего компонента приложения.
Я расширяю класс Application для работы с некоторыми глобальными переменными, которые нуждаются в контексте. Я знаю, что в классе Application есть метод onCreate(), который вызывается перед любым другим onCreate() в действии, но Я хотел бы знать, существует ли onDestroy() или аналогичный метод в классе Application, который может быть переопределен, чтобы я мог хранить переменные в постоянной памяти, отменить регистрацию и отправить последнее сообщение на сервер до того, как процесс приложения будет убит? Если нет, есть ли другой способ сделать это?
Нет такого вызова на производственном устройстве для класса Application.
То, что вы хотите сделать, обычно должно выполняться сразу после внесения изменений или в onPause()
соответствующего компонента приложения.
В андроиде нет концепции закрытия приложения. Пользователь просто уходит: это единственное событие, о котором вам будет известно (onPause()
в действии). Вы должны адаптировать свой дизайн приложения в соответствии с этим жизненным циклом.
Вы не должны пытаться найти обходной путь, это может только ухудшить ситуацию: что, если у пользователя заканчивается заряд батареи или если ваше приложение падает? все данные будут потеряны. Я не знаю, с какими данными вы работаете, но обычно это приводит к плохой оценке в Google Play. Даже если что-то плохое, все данные уже должны быть сохранены (AsyncTasks
отлично подходят для этого, не бойтесь начинать с каждого изменения, чтобы постоянно сохранять данные).
Прежде всего: я абсолютный новичок
Мне нужно выполнить некоторый код, когда мое приложение выйдет (да, я не знаю, что такое в 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.
Надеюсь на эту помощь.
Другой вариант, который у вас есть, - переопределить onDestroy() на первом экране вашего приложения, поэтому он будет вызываться прямо перед тем, как ваш процесс будет убит!