Sam Story

라이프 사이클 (Lifecycle) 본문

Android

라이프 사이클 (Lifecycle)

Sam H 2024. 4. 2. 15:30

 

1. 라이프 사이클 (Lifecycle) 이란?

AAC 에서 말하는 라이프 사이클은 생명주기 모니터링을 돕는 라이브러리다.

 

Activity 나 Fragment 의 현재 생명주기 상태를 기반으로 동작을 조정하는 클래스 및 인터페이스를 제공한다.

 

 

2. 라이프 사이클의 구성요소

 

- Lifecycle

 

라이프 사이클을 나타내는 객체

 

 

-  Lifecycle Owner

 

액티비티나 프래그먼트의 생명주기를 라이프사이클 객체에 담고

 

라이프 사이클 객체를 통해 다른 곳에서 해당 화면의 생명주기를 모니터링 할 수 있다.

 

자기 자신의 생명주기를 담은 라이프사이클 객체가 Lifecycle Owner 이다.

 

appCompatActivity 는 내부적으로 LifeCycleOwner를 구현 하고 있다.


그래서 Lifecycle객체를 직접 참조할 수 있음.

 

 

- Lifecycle Observer 

라이사이클 객체를 통해서 화면 밖에서 모니터링이 가능하지만

 

생명주기에 따른 동작은 여전히 화면에서만 컨트롤 할 수 있다

 

이렇기 때문에 화면밖에서도 생명주기에 따른 동작을 컨트롤 하기위해서

 

Lifecycle Observer를 구현한 클래스에서 생명주기 메서드를 정의할 수 있고

 

owner가 해당 생명주기 상태가되면 자동으로 수행된다.

 

 

간단한 예제를 통해 좀더 알기 쉽게 확인해보자.

 

3. 예제 

오늘 예제는 별다른 레이아웃 없이 생명주기를 로그로 확인해보는

 

간단한 예제로 준비해 보았다.

 

 

Lifecycle Observer 클래스

package com.example.lifecycle_aac

import android.util.Log
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner

class LifecycleObserver: DefaultLifecycleObserver{

    val TAG = "라이프 사이클 옵저버"

    override fun onCreate(owner: LifecycleOwner) {
        super.onCreate(owner)

        Log.d(TAG, "onCreate: ")

    }

    override fun onStart(owner: LifecycleOwner) {
        super.onStart(owner)

        Log.d(TAG, "onStart: ")

    }

    override fun onResume(owner: LifecycleOwner) {
        super.onResume(owner)

        Log.d(TAG, "onResume: ")

    }

    override fun onPause(owner: LifecycleOwner) {
        super.onPause(owner)

        Log.d(TAG, "onPause: ")

    }

    override fun onStop(owner: LifecycleOwner) {
        super.onStop(owner)

        Log.d(TAG, "onStop: ")

    }

    override fun onDestroy(owner: LifecycleOwner) {
        super.onDestroy(owner)

        Log.d(TAG, "onDestroy: ")

    }

}

 

간단한 설명을 더 하자면 생명주기 메서드 들이 override 된 것을 볼 수 있는데

 

이 메서드들은 Lifecycle Owner 의 생명주기를 override 해서 관찰 하는 것이다.

 

 

 

메인 액티비티

package com.example.lifecycle_aac

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() { // 이 액티비티가 LifeCycle Owner가 되는것

    val TAG = "메인액티비티"

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

        // 만들어준 LifecycleObsever 클래스를 인자로 해준다
        lifecycle.addObserver(LifecycleObserver())

        Log.d(TAG, "onCreate: ")

    }

    override fun onStart() {
        super.onStart()

        Log.d(TAG, "onStart: ")

    }

    override fun onResume() {
        super.onResume()

        Log.d(TAG, "onResume: ")

    }

    override fun onPause() {
        super.onPause()

        Log.d(TAG, "onPause: ")

    }

    override fun onStop() {
        super.onStop()

        Log.d(TAG, "onStop: ")

    }

    override fun onDestroy() {
        super.onDestroy()

        Log.d(TAG, "onDestroy: ")

    }

}

 

이렇게 코드를 짰을때 생명주기가 어떻게 돌아가는지 확인 해보자.

 

실행 결과

실행 결과

 

보다시피 액티비티 즉 Lifecycle Owner 와 같은 생명주기가 흐르고

 

Observer 클래스에서 Lifecycle Owner 생명주기에서 일어날 일들을 Observer 클래스 에서 작성할 수 있다.

 

 

 

이렇게 액티비티에서 생명주기 쪽 코드를 분리를 하게 되면

 

액티비티 쪽에서 작성해야 할 코드들을 줄 일 수 있고 하는 역할이 더 분명하게 나뉘는 장점이 있다.

 

이 라이브러리를 잘 사용하면 여러 생명주기에 따른 처리를 더 깔끔하게 처리할 수 있다.

 

 

 

오늘 예제의 github 주소

nam-su/LifecycleExample: AAC Lifecycle 예제 (github.com)

 

GitHub - nam-su/LifecycleExample: AAC Lifecycle 예제

AAC Lifecycle 예제. Contribute to nam-su/LifecycleExample development by creating an account on GitHub.

github.com

 

'Android' 카테고리의 다른 글

라이브 데이터 (LiveData)  (0) 2024.04.13
뷰모델 (ViewModel)  (0) 2024.04.11
데이터 바인딩 (Data Binding)  (1) 2024.04.01
레트로핏 (Retrofit)  (0) 2024.03.26
뷰 바인딩 (ViewBinding)  (0) 2024.03.19