チャット活動があります。このため、メッセージを受け取り次第、1つずつ追加します。
ViewModel をアクティビティで使用しようとしています。ViewModel から Activity にメッセージを渡すために LiveData を使用しています。アクティビティがアクティブな場合はすべて正常に動作しますが、アクティビティが非表示の状態の場合、オブザーバーは ViewModel からアイテムを取得できません。また、アクティビティを再開すると、オブザーバーは ViewModel で割り当てられた最新のアイテムのみを取得します。
基本的に、アプリがバックグラウンドにある場合はアイテムをバッファリングし、アクティビティの再開時にそれらをすべて取得する必要があります。
ChatViewModel
class ChatViewModel : ViewModel() {
var adapterMessagesLive: MutableLiveData<AdapterChatItems> = MutableLiveData()
fun addMessage() {
adapterMessagesLive.value = AdapterChatItems(items, addDirection)
}
}
ChatActivity
public class ChatActivity implements LifecycleRegistryOwner {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewModel.getAdapterMessagesLive().observe(this, adapterChatItemsObserver -> {
getAdapter().addMessages(adapterChatItemsObserver);
}
});
}