Study Record

[안드로이드] lifecycle library 사용하기 본문

안드로이드

[안드로이드] lifecycle library 사용하기

초코초코초코 2023. 6. 29. 11:10
728x90

 

😶 lifecycle library 를 사용하는 이유

Activity 에서 여러가지 기능을 사용하는 경우 onStart() 에서 사작하고 onStop() 끝나는 작업이 필요하다. 음악을 재생하거나 타이머를 재생하거나 하는 작업이 예시가 될 수 있다.

 

앱이 기능이 많아지면서 onStart() 와 onStop() 그뿐만 아니라 다른 액티비티 수명 주기에서 해야 할 작업이 많아지면 시작하고 끝나는 코드를 적지 않아 안드로이드 리소스를 낭비하거나 버그를 일으킬 수 있다.

 

이러한 문제를 간소화하기 위해 나온 Android Jetpack Library 가 lifecycle library 이다.

 

lifecycle library 는 수명 주기 인식 구성요소를 빌드할 수 있는 클래스와 인터페이스를 제공한다. 수명 주기 인식 구성요소는 Activity 와 Fragment 같은 다른 구성요소의 수명 주기 상태 변경에 따라 작업을 실행한다. 따라서 Activity 와 Fragment 의 onStart() , onStop() 과 같은 수명 주기 관련 메서드에 작업을 직접 정의하지 않고 수명 주기 인식 구성요소를 통해 해결할 수 있다.

 

 

😶 lifecycle library 의 중요 개념

 

- Lifecycle owners : 라이프 사이클을 소유하고 있는 컴포넌트로 Activity 와 Fragment 를 예시로 들 수 있다. Lifecycle owners 는    LifecyclerOwner 인터페이스를 구현한다.

 

- Lifecycle class : lifecycle 에 변화가 일어나면 이벤트를 수신하거나 lifecycle owner 의 실제 상태를 유지한다.

 

- Lifecycle observers : lifecycle 상태를 관찰하고 lifecycle 이 변경될 때 작업을 수행한다. lifecycle observers 는 lifecycleObserver 인터페이스를 구현한다.

 

 

 

😶lifecycle library 사용해보기

 

새로운 TestObject 객체에 LifecycleObserver 를 상속받고 Lifecycle owner 에게 lifecycle 변수를 받고 addObserver() 로 등록하면 Lifecycle owner(Ex. Activity, Fragment) 에서 이 객체를 onStart() 에 시작시키고 onStop() 에 멈춰야할 의무를 없애준다. 함수 앞에 @OnLifecycleEvent 어노테이션을 달아주면 상태가 변할 때 자동으로 시작하고 멈춰준다. 

class TestObject(lifecycle: Lifecycle) : LifecycleObserver {

    init {
        lifecycle.addObserver(this)
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun startTimer() {
        ...
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun stopTimer() {
        ...
    }
}

 

+ @OnLifecycleEvent 어노테이션의 Lifecycle.Event 종류와 의미

 

 

 

Lifecycle owner 에서는 다음과 같이 간단하게 정의만 해주면 된다. Activity 자체에는 lifecycle 이 포함되어 있기 때문에 자기 자신의 lifecycle 을 넘겨주면 된다.

class MainActivity : AppCompatActivity() {
    private lateinit var testObject: TestObject
	override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ...
        // TestObject initialize
        testObject = TestObject(this.lifecycle)
        ...
    }
}

Activity 에서 실행하지 않아도 onStart() 와 onStop() 때 TestObject 에서 정의된 함수들이 자동으로 실행할 것이다.

 

 

 

 

수명 주기 인식 구성요소로 수명 주기 처리  |  Android 개발자  |  Android Developers

새 Lifecycle 클래스를 사용하여 활동 및 프래그먼트 수명 주기를 관리합니다.

developer.android.com

 

728x90