Android: onDestroy () или аналогичный метод в классе приложений
я расширяю класс приложения для работы с некоторыми глобальными переменными, которые нуждаются в контексте. Я знаю, что в классе приложения есть метод onCreate (), который вызывается перед любым другим onCreate () в действиях, но Я хотел бы знать, есть ли onDestroy() или аналогичный метод в классе приложения, который может быть переопределен чтобы я мог хранить переменные в постоянной памяти, отменить регистрацию прослушивателя и отправить последнее сообщение на сервер до того, как процесс приложения получит убит? Если нет, есть ли другой способ сделать это?
6 ответов:
нет такого обратного вызова на производственном устройстве для класса приложения.
что вы хотите сделать, как правило, должно быть сделано сразу после внесения изменений, или в
onPause()соответствующего компонента приложения.
в android нет концепции закрытия приложения. Пользователь просто уходит : это единственное событие, о котором вы будете знать (
onPause()в мероприятии). Вы должны адаптировать свой дизайн приложения в соответствии с этим жизненным циклом.вы не должны пытаться найти обходной путь, это может только ухудшить ситуацию : что делать, если у пользователя заканчивается батарея, или если ваше приложение падает? все данные будут потеряны. Я не знаю, с какими данными вы работаете, но это обычно приводит к плохому рейтингу в Google Играть. Даже если что-то плохое случится, все данные уже должны быть сохранены (
AsyncTasksотлично подходят для этого, не бойтесь начинать один на каждом изменении, чтобы постоянно сохранять данные).
прежде всего: я абсолютный новичок
Мне нужно выполнить некоторый код, когда мое приложение выходит (да, я не знаю такой вещи в Android), и это работает нормально для меня:
- У меня есть приложение, которое расширяет приложение. В качестве члена MyApplication существует поле AtomicInteger с именем activeActivitiesNumber и открытый метод getter.
- все действия приложения расширяют MyActivy (который сам расширяет активность)
-MyActivity переопределяет методы onCreate, onResume и onStop, а также имеет защищенное поле: Защищено 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 не принадлежит вашему приложению (например, отправить электронное письмо), он запустит метод выхода.
еще одна проблема (не знаю, является ли она реальной или теоретической) заключается в том, что нет никакой гарантии, что в некоторых ситуациях будет вызван onStop.
надеюсь, что это поможет.
можно переопределить
onDestroy()наActivityкоторый будет последним закрыт в вашем приложении и проверить, если он заканчивает. В этом случае ваш код не будет вызван при вращении устройства. Но вы должны знать, чтоonDestroy()не вызывается, когда приложение закрывается через кнопку устройства home.@Override public void onDestroy(){ super.onDestroy(); if(isFinishing()){ //do your stuff here } }
можно использовать
registerActivityLifecycleCallbacks()в классе приложения со следующими обратными вызовами (я рекомендую создатьAppLifecycleCallbacksкласс, который расширяетActivityLifecycleCallbacks):public interface ActivityLifecycleCallbacks { void onActivityCreated(Activity activity, Bundle savedInstanceState); void onActivityStarted(Activity activity); void onActivityResumed(Activity activity); void onActivityPaused(Activity activity); void onActivityStopped(Activity activity); void onActivitySaveInstanceState(Activity activity, Bundle outState); void onActivityDestroyed(Activity activity); }
другой вариант, который у вас есть, - это переопределить onDestroy() на первом экране вашего приложения, поэтому он будет вызван прямо перед тем, как ваш процесс будет убит!
Comments