Как определить, когда приложение Android свернуто?

Как определить, когда приложение Android уходит в фоновый режим? onPause () или onUserLeaveHint () работают, но также вызываются при изменении ориентации или представлении другого действия.


person Agshin Huseynov    schedule 22.09.2016    source источник
comment


Ответы (3)


Если ориентация изменится, приложение снова вызовет жизненный цикл, что означает oncreate

вы также можете избежать этого, написав следующее в коде манифеста

 <activity
      android:name=""
      android:configChanges="orientation|keyboardHidden|screenLayout|screenSize"
      android:label="@string/app_name" />

это говорит системе, что при изменении ориентации или изменении keyboardHidden или screenLayout я справлюсь с этим самостоятельно, и нет необходимости создавать его заново.

затем напишите свой код на паузе

person Joyal C Joseph    schedule 22.09.2016
comment
Хорошо, счастливого кодирования - person Joyal C Joseph; 24.09.2016
comment
это может решить проблему с ориентацией на изменение, но onPause по-прежнему будет вызываться при переключении действий и приложение не будет свернуто ..... Я все еще ищу ответ. - person DoruChidean; 21.12.2018

Отмеченный ответ - это обходной путь для вопроса OP. Остальные из нас, которые ищут ответ, могут добиться этого с помощью компонентов архитектуры Android.

import android.arch.lifecycle.LifecycleObserver;

class OurApplication extends Application implements LifecycleObserver {

    @Override
    public void onCreate() {
        super.onCreate();
        ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onAppBackgrounded() {
        Logger.localLog("APP BACKGROUNDED");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onAppForegrounded() {
        Logger.localLog("APP FOREGROUNDED");
    }
}

и не забудьте обновить файл манифеста. установить атрибут android:name=".OurApplication" для тега <application>

person DoruChidean    schedule 08.03.2019
comment
Это должен быть принятый ответ. - person Oke Uwechue; 08.12.2020
comment
Добавьте ниже зависимость для тех, кто не может использовать androidx: implementation 'android.arch.lifecycle:extensions:1.1.1' - person MHSFisher; 02.02.2021

Попробуй это

 @Override
    protected void onUserLeaveHint() 
   { 
        // When user presses home page
        Log.v(TAG, "Home Button Pressed");
        super.onUserLeaveHint();
    }

Подробнее: https://developer.android.com/reference/android/app/Activity.html#onUserLeaveHint()

person Ram Prakash Bhat    schedule 22.09.2016
comment
Мне нужно завершить работу, когда приложение переходит в фоновый режим. onUserLeaveHint также вызывается при изменении ориентации. Так что это не работает для меня - person Agshin Huseynov; 22.09.2016