目录
1 概念
LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。
2 特点
如果观察者(由 Observer 类表示)的生命周期处于 STARTED 或 RESUMED 状
态,则 LiveData 会认为该观察者处于活跃状态。LiveData 只会将更新通知给活跃的观察
者。为观察 LiveData 对象而注册的非活跃观察者不会收到更改通知。
-
确保界面符合数据状态
LiveData 遵循观察者模式。当底层数据发生变化时,LiveData 会通知 Observer 对象。您可以整合代码以在这些 Observer 对象中更新界面 -
不会发生内存泄漏
观察者会绑定到 Lifecycle 对象,并在其关联的生命周期遭到销毁后进行自我清理 -
不会因 Activity 停止而导致崩溃
如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件 -
不再需要手动处理生命周期
界面组件只是观察相关数据,不会停止或恢复观察。LiveData 将自动管理所有这些操作,因为它在观察时可以感知相关的生命周期状态变化。 -
数据始终保持最新状态
如果生命周期变为非活跃状态,它会在再次变为活跃状态时接收最新的数据。例如,曾经在后台的 Activity 会在返回前台后立即接收最新的数据。 -
适当的配置更改
如果由于配置更改(如设备旋转)而重新创建了 Activity 或 Fragment,它会立即接收最新的可用数据。 -
共享资源
可以使用单例模式扩展 LiveData 对象以封装系统服务,以便在应用*享它们。LiveData 对象连接到系统服务一次,然后需要相应资源的任何观察者只需观察 LiveData 对象
3.使用
def lifecycle_version = "2.3.1"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
public class MyViewModel extends ViewModel {
MutableLiveData<Integer> liveData;
public MutableLiveData getLiveData() {
if (liveData==null){
liveData = new MutableLiveData<>();
liveData.setValue(0);
}
return liveData;
}
public void setLiveData(int value) {
if (liveData==null){
liveData = new MutableLiveData<>();
liveData.setValue(0);
} else{
liveData.setValue(liveData.getValue()+value);
}
}
}
myViewModel = new ViewModelProvider(this).get(MyViewModel.class);
myViewModel.getLiveData().observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer o) {
mResult.setText(o+"");
}
});
//默认设置
mResult.setText( myViewModel.getLiveData().getValue()+"");
mZan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myViewModel.setLiveData(1);
}
});