본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] AAC 로 app 의 background, foreground 상태 알기

by 돼지왕 왕돼지 2018. 11. 24.
반응형


https://medium.com/@arturogdg/background-and-foreground-events-with-android-architecture-components-233fdd9fa855

https://developer.android.com/reference/android/arch/lifecycle/Lifecycle

android aac, app bg fg 상태 조회, DefaultLifecycleObserver, delay, foreground 상태 알기, lifecycle, lifecycle observer, LifecycleObserver, OnLifecycleEvent, ON_CREATE, ON_DESTROY, ON_PAUSE, ON_RESUME, ON_START, ON_STOP, ProcessLifecycleOwner, [android] AAC 로 app 의 background


-

build.gradle 에 아래것을 추가한다.

kapt "android.arch.lifecycle:compiler:1.1.1"

implementation "android.arch.lifecycle:extensions:1.1.1”



-

background, foreground state detection 을 위해 아래 클래스를 생성한다.

class ApplicationObserver : LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_START)

    fun onForeground() {

        // App goes to foreground

    }


    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)

    fun onBackground() {

        // App goes to background

    }

}



-

등록은 아래와 같이 한다.

class MyApplication : Application() {

    override fun onCreate() {

        super.onCreate()

        ProcessLifecycleOwner.get()

            .lifecycle

            .addObserver(ApplicationObserver())

    }

}



-

ProcessLifecycleOwner 를 잘 활용하면, activity 의 onCreate, onDestroy, onStart, onResume, onPause, onStop 등의 상태도 알 수 있다.


단, 주의사항이 있는데..

ProcessLifecycleOwner 는 ON_CREATE 는 1회만 호출되고, ON_DESTROY 는 절대 호출되지 않는다.

ON_START, ON_RESUME 은 첫번째 activity 가 이 상태에 있을 때만 불리고, ON_PAUSE, ON_STOP 은 마지막 activity 가 이 상태에 있을때 delay 와 함께 전달된다.

(돼왕 : 이렇게 작동한다면 어떤 케이스에 이 녀석을 활용할지 검토가 필요해보임.. ON_PAUSE, ON_STOP 이후 다시 Activity 가 올라오면 ON_START, ON_RESUME 이 불릴지 테스트 필요)

https://developer.android.com/reference/android/arch/lifecycle/ProcessLifecycleOwner



-

ON_CREATE, ON_START, ON_RESUME 은 LifecycleOwner 의 관련 method 들이 불린 후에 불린다.

ON_PAUSE, ON_STOP, ON_DESTORY 는 LifecycleOwner 의 관련 method 들이 불리기 전에 불린다.

(예를 들어 ON_START 는 onStart 가 return 된 다음에 불리고, ON_STOP 은 onStop 이 불리기 전에 불린다.)



-

Java 8 을 사용한다면 DefaultLifecycleObserver 를 사용하면 되며 build.gradle 에 다음을 dependency 로 추가해야 한다.

android.arch.lifecycle:common-java8:<version>


사용 코드 패턴은 아래와 같다.

class TestObserver implements DefaultLifecycleObserver { // default method 들을 가지고 있다.

     @Override

     public void onCreate(LifecycleOwner owner) {

         // your code

     }

 }



-

Java 7 을 사용한다면 annotation 방식을 사용한다. Java 8 이 android 의 main stream 이 된 후에는 이 방식은 deprecate 될 것이기 떄문에 DefaultLifecycleObserver 를 사용하는 것이 추천된다.

 class TestObserver implements LifecycleObserver {

   @OnLifecycleEvent(ON_STOP)

   void onStopped() {}

 }



-

Observer method 들은 0개 혹은 1개의 argument 를 받는다.

argument 를 명시한다면 이는 LifecycleOwner 가 되야 한다.


ON_ANY 르 마킹된 녀석은 두번째 argument 를 받을 수 있는데, 이는 Lifecycle.Event 가 된다.

class TestObserver implements LifecycleObserver {

   @OnLifecycleEvent(ON_CREATE)

   void onCreated(LifecycleOwner source) {}


   @OnLifecycleEvent(ON_ANY)

   void onAny(LifecycleOwner source, Event event) {}

 }



반응형

댓글1