我正在使用带有活动的 LiveData。当我在 Android 7 上测试时一切正常,但是当我在较低的 Android SDK 版本上测试时出现问题。
- 当我关闭应用程序,发送一些消息,然后再次打开应用程序时,我正在通过 LiveData 从 ViewModel 获取接收到的值。
- 但是,如果我在当前活动上打开新活动,在 ViewModel 中收到一些消息,然后返回到该活动,我不会在活动中收到这些消息。
在第一种情况下onPause
,onStop
然后onStart
,onResume
被调用。在第二种情况下onPause
, thenonResume
被调用。同样在第二种情况下,我有活跃的观察者,但我没有收到消息。
聊天视图模型
class ChatViewModel : ViewModel() {
var adapterMessagesLive: MutableLiveData<AdapterChatItems> = MutableLiveData()
fun addMessage() {
adapterMessagesLive.value = AdapterChatItems(items, addDirection)
}
}
聊天活动
public class ChatActivity implements LifecycleRegistryOwner {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewModel = ViewModelProviders.of(this).get(ChatViewModel.class);
viewModel.getAdapterMessagesLive().observe(this, adapterChatItemsObserver -> {
getAdapter().addMessages(adapterChatItemsObserver);
}
});
}
更新
经过更多调试,我发现在 Android 7 活动中,在onPause
调用后继续从 LiveData 接收值。但在较旧的 Android SDK 上它不起作用。