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



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

622   6  

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

    Ничего не найдено.