AAC-LifeCycle
들어가기전에
앱을 만들다 보면 수명주기에 관련된 코드를 넣을 때가 있다.
이러한 코드를 작성하다 보면 생명주기 관련 메서드에 의도치 않게 많은 양의 코드가 들어가게 된다.
이러한 생명주기에 대한 관찰을 돕기위한 라이브러리가 AAC에 포함되어 있어 정리하고 가고자 한다.
왜 써야 하는가
위에 말했듯이 Activity나 Fragment의 생명주기 메서드에 너무 많은 코드를 작성하게 되면 유지가 어려워지는 문제가 발생하고 생명주기가 필요 이상으로 오래 유지되는 경합 상태를 유발할 수 있다.
AAC의 LifeCycle을 사용하면 Activity와 Fragment를 가볍게 유지할 수 있도록 해준다.
구성
Lifecycle
Activity와 Fragment의 생명주기 정보를 가지고 있는 클래스이다.
Lifecycle은 두가지의 Enum 클래스를 가지고 있다.
- Event: LifeCycleOwner의 생명주기 이벤트에 따른 상태
- ON_ANY
- ON_CREATE
- ON_DESTROY
- ON_PAUSE
- ON_RESUME
- ON_START
- ON_STOP
- State
- CREATED : onCreate()의 Call 이후 or onStop()의 Call 이후
- DESTROYED : onDestory()이 Call 되기 직전
- INITIALIZED : onCreate()이 Call이 되지 않은 시점
- RESUMED : onResume()이 Call 된 시점
- STARTED : onStart() Call 이후 or onPause() Call 직전
LifecycleOwner
Lifecycle이 있음을 나타내는 getLifecycle()이라는 메서드 하나를 가진 인터페이스이다.
ComponentActivity와 Fragment 클래스에서 LifecycleOwner를 구현하고 있다.
LifecycleObserver
생명주기에 따른 동작을 정의하기 위한 Observer로써 Lifecycle에 addObserver(observer)
로 추가 시켜줄 수 있다.
구현 예제
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
): LifecycleObserver {
private var enabled = false
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun start() {
if (enabled) {
// connect
}
}
fun enable() {
enabled = true
if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
// connect if not connected
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun stop() {
// disconnect if connected
}
}
위와 같이 MyLocationListener가 LifecycleObserver를 구현하여 기존 Activity의 생명주기 메서드에서 처리하던 작업을 이전할 수 있게된다.
마치며
Lifecycle은 다음 공부할 LiveData와 관련 있기 때문에 그전에 정리한 것이 도움이 될 것 같다.
블로그 글 쓰는 숙련도는 아직 모자르지만 추후 좀 더 다듬어서 이 부분을 수정할 수 있으면 좋을 것 같다.
출처 / 참고 -
Android developers
blog - Seungmin — maryang
Author And Source
이 문제에 관하여(AAC-LifeCycle), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rhkddud9531/AAC-LifeCycle저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)