2021 Sep. 18.
状況
ViewModel内のLiveDataの値に従ってActivityで音楽再生するようにしていると、画面回転によって意図しない音楽再生となった時の対処
概要
Activityのcreateが直前にdestroyされたことによるものなのかどうかを示すフラグ変数を持つ。
onSaveInstanceState()でActivityのdestroy時にフラグ変数を保存する。
onCreate()時にフラグ変数を取り出す。
フラグ変数に応じてLiveDataのObserverの処理を行う。
Activity.kt
class MainActivity : AppCompatActivity() { private var isDestroy: Boolean = false override fun onCreate(savedInstanceState: Bundle?) { if (savedInstanceState != null) { isDestroy = savedInstanceState.getBoolean("IS_DESTROY") } val someLiveDataObserver = Observer<T> { some -> if (isDestroy) { } else { } } fooViewModel.someLiveData.observe(this, someObserver) } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) isDestroy = true outState.putBoolean("IS_DESTROY", true) } }