rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

android開発 画面回転後のActivityにおいてLiveDataによるデータ更新を防ぐ

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)
    }
}