AAC - Lifecycles
Updated:
Lifecycles
생명주기 모니터링을 돕는 라이브러리
-
Lifecycle : Lifecycle 을 나타내는 객체
- Lifecycle Owner : Life 객체에 activity, fragment의 상태를 제공
- Lifecycle Observer : 상태변화에 대한 이벤트를 받음
Lifecycle Owner : 자신의 생명주기를 담은 Lifecycle 객체
Activity, Fragment 에서 생명주기를 분리하여 Lifecycle 객체에 담는다. Lifecycle 객체를 통해 다른 곳에서 해당 화면의 생명주기를 모니터링 할 수 있다.
class MyActivity : AppCompatActivity() {
private lateinit var myLocationListener: MyLocationListener
override fun onCreate(...) {
myLocationListener = MyLocationListener(this, lifecycle) { location ->
// update UI
}
Util.checkUserStatus { result ->
if (result) {
myLocationListener.enable()
}
}
}
}
internal class MyLocationListener(
private val context: Context,
private val lifecycle: Lifecycle,
private val callback: (Location) -> Unit
) {
private var enabled = false
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun start() {
if (enabled) {
// connect
}
}
fun enable() {
enabled = true
// lifecycle.currentState 로 생명주기 모니터링이 가능하다.
if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
// connect if not connected
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun stop() {
// disconnect if connected
}
}
Lifecycle Observer
생명주기에 따른 동작은 여전히 화면에서만 정의 할 수 있기 때문에 화면 밖에서도 생명주기에 따른 동작을 정의하기 위해서는 원하는 클래스에 LifecycleObserver 인터페이스를 구현하고, 넘겨받은 LifecycleOwner 객체에 구현한 LIfecycleObserver를 등록해야한다.
LifecycleObserver를 구현한 클래스는 생명주기 메소드를 정의할 수 있다. 이러한 메소드들은 등록한 Lifecycle Owner가 해당 생명주기 상태가 되면 자동으로 수행되면서, 객체가 화면과 동일한 생명주기를 가진 것 처럼 행동하게 한다.
class observser : LifecycleObserver{
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun connectListener() {
...
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun disconnectListener() {
...
}
}
class MainActivity extends AppcompatActivity{
///
myLifecycleOwner.getLifecycle().addObserver(observer())
///
override fun onResume(...){
...
}
}
Lifecycles 를 통해 화면밖에서 화면의 생명주기를 모니터링하고, 동작을 정의할 수 있다. 이러한 점은 보다 더 직관적인 Lifecycle Programming 을 가능하게 한다.
Lifecycle class 에는 2가지 Enum 을 포함한다.
-
Event
-
State
Lifecycle.Event
- ON_ANY : LifecycleOwner의 모든 event에 대한 상수
- ON_CREATE : LifecycleOwner의 onCreate 이벤트에 대한 상수
- ON_DESTROY : LifecycleOwner의 onDestory 이벤트에 대한 상수
- ON_PAUSE : LifecycleOwner의 onPause 이벤트에 대한 상수
- ON_RESUME : LifecycleOwner의 onResume 이벤트에 대한 상수
- ON_START : LifecycleOwner의 onStart 이벤트에 대한 상수
- ON_STOP : LifecycleOwner의 onStop 이벤트에 대한 상수
Lifecycle.State
- CREATED : Owner의 onCreate() 이후나 onStop() 직전에 바뀜
- DESTROYED : Owner의 onDestroy()가 불리기 직전에 바뀜
- INITIALIZED : Owner의 onCreate()가 불리기 직전에 바뀜
- RESUMED : Owner의 onResume()이 불린 이후에 바뀜
- STARTED : Owner의 onStart() 이후나 onPause() 직전에 바뀜
참고
https://medium.com/@maryangmin/android-architecture-components-%EC%86%8C%EA%B0%9C-1-8e04491be1f6
https://www.bsidesoft.com/5999
https://jaejong.tistory.com/118
https://developer.android.com/topic/libraries/architecture/lifecycle?hl=ko