-
카테고리
-
세부 분야
모바일 앱 개발
-
해결 여부
미해결
SavedStateHandle 앱 종료 시킨 후, 다시 열면 0으로 초기화 되어있습니다ㅠ
21.02.03 12:11 작성 조회수 306
0
안녕하세요!
SavedStateHandle 관련 영상을 보고 실습을 진행해 보았는데, 앱 종료후 변화된 count가 보이지 않고,
0값으로 바뀌어 앱이 실행됩니다..
어떻게 하면, 앱 종료전 count 값을 불러올 수 있을까요?
아래는 제 코드입니다ㅠ
class MainViewModel(private val savedStateHandle: SavedStateHandle) : ViewModel() {
private var savedCount = savedStateHandle.get<Int>("count") ?: 0
set(value) {
savedStateHandle.set("count", value)
field = value
_count.value = savedCount
}
private val _count = MutableLiveData<Int>(savedCount)
val count : LiveData<Int> get() = _count
fun plusCount(){
savedCount++
Log.e("asd",count.value.toString())
}
fun minusCount(){
savedCount--
Log.e("asd",count.value.toString())
}
}
답변을 작성해보세요.
0
오준석
지식공유자2021.02.03
일반적으로 화면 회전에 대해서는 ViewModel을 사용해서 상태 저장이 가능합니다.
그런데 시스템에 의해 앱이 강제 종료될 때 (유휴상태로 오랜 시간이 지난 경우 등)는 ViewModel 또한 파괴되어 상태 보존이 어렵습니다.
일반적으로 시스템에 의한 kill에 대처하려면 Activity나 Fragment에서 onSavedInstanceState 에서 상태 저장 후 onRestoreInstanceState에서 복원 처리를 하게 되는데
ViewModel에서 이를 처리할 수 있도록 SavedStateHandle이 제공됩니다.
시스템에 의한 kill이 되었을 때의 처리를 하는 코드이기 때문에
사용자가 종료를 했을 때는 정상 종료이므로 앱 종료후에 값이 초기화된 것은 정상 동작입니다.
https://developer.android.com/topic/libraries/architecture/viewmodel-savedstate
답변 1