問題タブ [android-livedata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
23292 参照

android - Room : Dao からの LiveData は、LiveData 値が変更されていない場合でも、更新ごとに Observer.onChanged をトリガーします。

LiveData の値が明らかに変更されていなくても、DB で行が更新されるたびに、Dao によって返される LiveData がそのオブザーバーを呼び出すことがわかりました。

次の例のような状況を考えてみましょう:

エンティティの例

例のダオ


バックグラウンドスレッドのどこかに

UIのどこかに

この例では、UI はユーザー名のみに関心があるため、LiveData のクエリには名前フィールドのみが含まれます。ただし、他のフィールドのみが更新されたとしても、observer.onChanged は Dao Update で呼び出されます。(実際、User エンティティに変更を加えずに UserDao.updateUser を呼び出しても、observer.onChanged は引き続き呼び出されます)

これは Room の Dao LiveData の設計された動作ですか? 選択したフィールドが更新されたときにのみオブザーバーが呼び出されるように、これを回避できる可能性はありますか?


編集: 次のクエリを使用して、コメントの KuLdip PaTel が示唆するように lastActiveDateTime 値を更新するように変更しました。ユーザー名の LiveData のオブザーバーは引き続き呼び出されます。