AAC-LifeCycle

rhkddud9531·2021년 8월 30일
0

Android

목록 보기
2/3

들어가기전에

앱을 만들다 보면 수명주기에 관련된 코드를 넣을 때가 있다.
이러한 코드를 작성하다 보면 생명주기 관련 메서드에 의도치 않게 많은 양의 코드가 들어가게 된다.
이러한 생명주기에 대한 관찰을 돕기위한 라이브러리가 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

profile
축구왕이 되고 싶은 안드로이드 개발자

0개의 댓글