[Android] Lifecycle & Viewmodel

김민주·2022년 10월 17일
0

Android

목록 보기
6/21

Activity-lifecycle

활동 수명 주기에 관한 이해

onCreate()

⬇️ background 로 밀려날 때 (다른 Activity가 실행될 때)

onPause()

⬇️ 활동이 사용자에게 표시되지 않을 때 (Activity가 화면에서 가려질 때)

onStop()

⬇️ app 종료 (정상종료 or 강제종료)

onDestory()





ViewModel 과 SaveInstanceState와 영구저장소

휘발성 data를 보존하기 위해

onSaveInstanceState 사용해라

👎 그 안의 Bundle은 크기가 큰 데이터도 못담는 문제 발생!
👍 강제종료해도 data 살아있음


But, SaveState도 onFinish 사용자가 앱을 종료할 경우엔 데이터 저장X



ViewModelActivity와는 다른 생명주기

화면 전환 시 (구성 변경 시) 뷰모델은 살아있음

그 러 므 로

Activity 에서는 data를 저장하지 않고!

ViewModel 에서 data를 불러오는 형식으로 개발하자

💪 ViewModel은 Singleton Pattern 으로 생성하자 💪


먼저 ViewModel 를 사용하기 앞서,

        kotlinOptions {
            freeCompilerArgs += [
                    "-Xjvm-default=all",
            ]
        }
    }
   def lifecycle_version = "2.6.0-alpha02"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")

dependencies 에 implement를 해준다


class MyViewModel : ViewModel() {

뷰모델을 상속받은 클래스를 생성.



ViewModel 인스턴스 생성방법



  • ViewModelProvider

val myViewModel = ViewModelProvider(this).get(MyViewModel::class.java)
  1. ViewModelProvider()을 이용하여 싱글톤으로 생성

val myViewModel by viewModels<MyViewModel>() {factory}

ViewModelProvider.Factory를 상속받고 ViewModel을 리턴해주는 factory를 이용하여

  1. by 로 FragmentViewModelLazy 위임하여 생성

    Activity는 by viewModels()
    Fragment는 by ActivityViewModels()

    - 뷰모델의 라이프사이클을 액티비티의 라이프사이클에 종속시키게 됨




  • AbstractSavedStateViewModelFactory

    • SavedStateHandle를 생성자로 받아 생성
      - 시스템에 의해 강제종료될 경우 데이터 보존됨

참고: 냉동코더의 알기 쉬운 Modern Android Development

profile
𝐃𝐨𝐧'𝐭 𝐛𝐞 𝐚 𝐩𝐫𝐨𝐜𝐫𝐚𝐬𝐭𝐢𝐧𝐚𝐭𝐨𝐫💫

0개의 댓글