onCreate()
⬇️ background 로 밀려날 때 (다른 Activity가 실행될 때)
onPause()
⬇️ 활동이 사용자에게 표시되지 않을 때 (Activity가 화면에서 가려질 때)
onStop()
⬇️ app 종료 (정상종료 or 강제종료)
onDestory()
휘발성 data를 보존하기 위해
onSaveInstanceState 사용해라
👎 그 안의 Bundle은 크기가 큰 데이터도 못담는 문제 발생!
👍 강제종료해도 data 살아있음
But, SaveState도 onFinish 사용자가 앱을 종료할 경우엔 데이터 저장X
ViewModel 은 Activity와는 다른 생명주기
화면 전환 시 (구성 변경 시) 뷰모델은 살아있음
그 러 므 로
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() {
뷰모델을 상속받은 클래스를 생성.
val myViewModel = ViewModelProvider(this).get(MyViewModel::class.java)
val myViewModel by viewModels<MyViewModel>() {factory}
ViewModelProvider.Factory를 상속받고 ViewModel을 리턴해주는 factory를 이용하여
by 로 FragmentViewModelLazy 위임하여 생성
Activity는 by viewModels()
Fragment는 by ActivityViewModels()
- 뷰모델의 라이프사이클을 액티비티의 라이프사이클에 종속시키게 됨
AbstractSavedStateViewModelFactory
- 시스템에 의해 강제종료될 경우 데이터 보존됨