如果我调用视图模型init块中的某个函数A,它将更新实时数据,然后我在活动的onViewCreated中观察该实时数据。那么它是否正确。它将获得存储在实时数据中的值。或者我必须在观察活动中的实时数据后调用函数A。如果它起作用了,为什么它会起作用呢?
46qrfjad1#
LiveData只是一个数据保持器。它将存储状态的最新值。如果您在init块中调用函数A,则实时数据可能会在您开始在片段/活动中观察它之前获得其值,即当您观察它时,您将获得由函数A更新的实时数据的新值。如果您在设置观察器之后调用函数A,您可能会先看到LiveData的初始值,然后再观察新值。无论哪种情况,都不会有太大区别,因为函数A设置的值无论如何都会被处理。但是如果您希望在Activity/Fragment加载后立即设置LiveData的值,那么ViewModel的init块是一个不错的选择。另外请注意,如果您从Fragment/Activity调用函数A,那么每次视图被销毁和重新创建时,它都会被调用。因此,如果您在函数A中执行某些操作,而这些操作不应该在每次视图重新创建时重复,那么ViewModel的init块是这里唯一的选项。
LiveData
init
1条答案
按热度按时间46qrfjad1#
LiveData
只是一个数据保持器。它将存储状态的最新值。如果您在init块中调用函数A,则实时数据可能会在您开始在片段/活动中观察它之前获得其值,即当您观察它时,您将获得由函数A更新的实时数据的新值。如果您在设置观察器之后调用函数A,您可能会先看到LiveData的初始值,然后再观察新值。无论哪种情况,都不会有太大区别,因为函数A设置的值无论如何都会被处理。但是如果您希望在Activity/Fragment加载后立即设置LiveData的值,那么ViewModel的
init
块是一个不错的选择。另外请注意,如果您从Fragment/Activity调用函数A,那么每次视图被销毁和重新创建时,它都会被调用。因此,如果您在函数A中执行某些操作,而这些操作不应该在每次视图重新创建时重复,那么ViewModel的
init
块是这里唯一的选项。