반응형

LifecycleObserver

설명

  • Activity의 onCreate, onDestroy와 같은 생명 주기 메소드를 별도로 분리하여 Activity 코드를 간결하게 유지할 수 있도록 해주는 클래스
  • background, foreground 상태 체크를 위해서 Application에 LifecycleObserver를 적용할 수 있다.

Activity에 적용하는 예제

ActivityLifecycleObserver
class ActivityLifecycleObserver(private val lifecycle: Lifecycle) : LifecycleObserver {
    companion object {
        const val TAG = "[DEBUG]"
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    fun onCreated(source: LifecycleOwner) {
        Log.d(TAG, "onCreated")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onStart() {
        Log.d(TAG, "onStart")
        if (lifecycle.currentState.isAtLeast(Lifecycle.State.INITIALIZED)) {
            Log.d(TAG, "currentState is greater or equal to INITIALIZED")
        }
        if (lifecycle.currentState.isAtLeast(Lifecycle.State.CREATED)) {
            Log.d(TAG, "currentState is greater or equal to CREATED")
        }
        if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
            Log.d(TAG, "currentState is greater or equal to STARTED")
        }
        if (lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED)) {
            Log.d(TAG, "currentState is greater or equal to RESUMED")
        }
        if (lifecycle.currentState.isAtLeast(Lifecycle.State.DESTROYED)) {
            Log.d(TAG, "currentState is greater or equal to DESTROYED")
        }
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun onResume() {
        Log.d(TAG, "onResume")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun onPause() {
        Log.d(TAG, "onPause")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun onStop() {
        Log.d(TAG, "onStop")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun onDestroy() {
        Log.d(TAG, "onDestroy")
    }
}
MainActivity
class MainActivity : AppCompatActivity() {
    private var observer = ActivityLifecycleObserver(lifecycle)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        lifecycle.addObserver(observer)
    }
}

Application에 적용하는 예제

build.gradle
dependencies {
    ....
    implementation "android.arch.lifecycle:extensions:1.1.1"
}
ApplicationLifecycleObserver
class ApplicationLifecycleObserver : LifecycleObserver {
    companion object {
        const val TAG = "[DEBUG]"
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onForeground() {
        Log.d(TAG, "onForeground")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun onBackground() {
        Log.d(TAG, "onBackground")
    }
}
AppApplication
class AppApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        ProcessLifecycleOwner.get().lifecycle.addObserver(ApplicationLifecycleObserver())
    }
}
AndroidManifest.xml
<application ... android:name=".AppApplication">...</application>

참고

반응형

'Development > Android' 카테고리의 다른 글

[Android] ExoPlayer  (0) 2021.02.10
[Android] ViewTreeObserver  (0) 2021.02.10
[Android] BuildConfig  (0) 2021.02.09
[Android] meta-data  (0) 2021.02.09
[Android] Kotpref  (0) 2021.02.09

+ Recent posts