[Android] ViewModel clear(초기화) 및 데이터가있는 livedata duplicate observe

2022. 2. 23. 14:56모바일/Android_Java

[Android] ViewModel clear(초기화) 및 데이터가있는 livedata duplicate observe

문제점

블루스 (키보드, 마우스 등)연결시 해당 화면의 onstop ~ onDestroy 안드로이드 생명주기에 따라 실행된다.

이때 ViewModel의 생명주기에 따라 ViewModel은 clear되지 않고 살아있게된다,

oncreate에서 viewmodel을 설정하면서


new ViewModelProvider(this, new viewModelProvider.NewInstanceFactory()).get(viewmodel.class)

viewmodel store에 존재했던 viewmodel을 가져오게 되는데 기존 livedata에 set했던 데이터들이 남아있게 된다.

그 데이터를 observe하면 데이터가 있는 livedata에 observe하는것이므로 처음 observe 할때 바로 emit을 받아서 onChanged함수가 실행되고 observe콜백을 받게 된다.

따라서, 방법은2가지 일 것같다.

  1. eventemitter android 를 만들어 데이터 emit시에 초기화한다.
  2. viewmodel을 설정하기 전에 viewmodelstore를 클리어한다

getViewModelStore().clear();