rokkonet

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

android LiveDataでのpostValueとsetValueの違い

2022 Sep. 23.

参照先
AACのLiveDataのsetValueとpostValueの違いについて - log.atsumo
android — MutableLiveDataのsetValue()とpostValue()の違い

setValueはメインスレッドでのみ利用可能。
postValueはメインスレッド以外のスレッドで利用可能。

下記コードでpostValueを使うと失敗する。

class MyViewModel: ViewModel()  {
    private var localInt = 0

    // LiveData変数を作成
    private val _myInt = MutableLiveData<Int>(1)
    val myInt: LiveData<Int> get() = _myInt

    fun tmpFun() {
        _myInt.postValue(11)
    }

    fun wait_addXtimes(times: Int, sec:Long) {
        for (i in 1..times) {
            try {
                Thread.sleep(sec * 1000)
            } catch (e: InterruptedException) {
            }
            // _myInt.postValue(++localInt) <- NG
            _myInt.value = ++localInt
        }
    }
}