【Kotlin/Android】MutableLiveDataのpostValueの使い方!setValueとの違いと注意点

この記事からわかること
- Android Studio/KotlinのMutableLiveDataの使い方
- postValueメソッドの役割
- setValueとの違いと注意点
\ アプリをリリースしました /
参考文献:公式リファレンス:LiveData
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
MutableLiveDataでvalue(値)を変更する方法
データの変更を監視するためにMutableLiveData型を使用している場合は実際の値を参照するためにはvalue
プロパティ(#getvalue)
を参照します。その際にvalue
プロパティはnullableになるのでエルビス演算子を使って代替値などを渡す必要があります。
おすすめ記事:【Kotlin/Android】nullをチェックする方法!早期returnとエルビス演算子
ではそもそもvalue
に値を渡す方法ですがこれにはpostValue
とsetValue
メソッド(valueプロパティに格納)の2つの方法が存在します。両者には大きく違うポイントがあるのでそれぞれの役割を整理していきます。
postValueメソッド
postValue
はバックグラウンドスレッドから値を変更する非同期的なメソッドです。UIスレッドからも呼び出すことも可能ですが、非同期であるためタイミングにズレが生じ、期待通りにUIと同期させることができない場合があるので注意が必要です。
使用想定はDBからデータを取得する場合など非同期的にデータを取得し、MutableLiveDataに反映させたい場合などです。
postValue
メソッドの特徴としてオブザーバーから観測している場合は正常にvalue
プロパティ(#getvalue)
から値を取得できますが、バックグラウンドスレッドから値を参照しても取得することはできません。そのため以下のように値を取得しようとしても2
を取得することはできません。
setValueメソッド
setValue
はメインスレッドから値を変更する同期的なメソッドです。バックグラウンドスレッドからも呼びだすことは可能ですがメインスレッドでの使用が推奨されています。
メインスレッドで同期的に値を設定するので即座に変更は伝えられるのでvalue
プロパティ(#getvalue)
からでも即座に値を取得することが可能です。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。