1da*_*on1 8 binding android observable android-livedata
关于Stackoverflow,存在与LiveData和ObservableField之间的差异有关的多个问题。另外,我在互联网上找到了有关该主题的多篇文章。所有这些都说明LiveData与ObservableField不同,它具有生命周期意识。他们中的大多数人还提到,如果像Activity或Fragment这样的组件观察到该属性,则使用LiveData代替ObservableField是有利的,因此我们不需要退订。
但是,即使阅读了所有这些内容,我仍然不清楚的是,使用LiveData而不是ObservableField进行数据绑定是否有某些优势。例如:
ViewModel:
class UserViewModel(user: User) : ViewModel {
val userName = ObservableField<String>(user.name) // Option 1
val userName = MutableLiveData<String>(user.name) // Option 2
}
Run Code Online (Sandbox Code Playgroud)
布局:
<layout>
<data>
<variable name="viewModel" type="com.example.UserViewModel" />
</data>
...
</layout>
Run Code Online (Sandbox Code Playgroud)
对于选项2,我binding.setLifecycleOwner(activity)当然也必须使用。让我们假设除了布局之外没有其他东西userName。
我的问题是:
使用选项2相对于选项1是否有任何优势,或者在这种情况下没有关系,因为视图(布局)将一直观察到它存在为止?
更让我感到困惑的是这篇文章: https : //android.jlelse.eu/android-architecture-components-livedata-with-data-binding-7bf85871bbd8表示: “在以前的方法中(如果没有LiveData)在UI上显示数据之前,我们应该事先检查它是否仍然存在。使用LiveData,我们不必担心,因为只有在Activity至少已启动(因此处于启动或恢复状态)时才会发布数据。”
我不明白这个引用的部分。在使用“先前方法”的情况下检查UI是否仍然存在是什么意思ObservableField?对于我在选项1中的示例,您将如何应用此检查?
当您使用ObservableField并聆听其更改时,您会在两种情况下收到通知:
现在,当您收到此类事件的通知并且您需要更改诸如 textView 等 UI 时,案例 1 将正常工作,因为该活动可见,但在案例 2 中,不建议更改 UI,因为该活动不可见,并且如果活动不可见,也可能会崩溃视图不存在(就像完成活动的状态)。
所以这里为了避免这种情况 2 崩溃和不需要的数据更改Live data开始发挥作用,因为Live data只有在活动可见时您才会收到更改事件。实时数据观察者根据 Activity/Fragment 的生命周期工作。所以你不需要在 UI 更新之前检查视图是否存在,因为它本身没有调用观察者。
| 归档时间: |
|
| 查看次数: |
1201 次 |
| 最近记录: |