jetpack之LiveData

LiveData

一般的LiveData配合ViewMode使用

LiveData是一个可以观察的,数据持有者。也就是说LiveData是观察生命周期的

优势

  1. 确保UI的显示状态与数据一致:因为是使用了观察者模式
  2. 没有内存泄漏:与生命周期相关,在UI执行了destroy的时候,观察者自动清除
  3. 不会因为活动停止而崩溃:如果观察者在后台堆栈中活动,就不会接受到LiveData事件
  4. 不再手动处理生命周期:观察者模式
  5. 保持数据最新:观察者页面进入前台的时候,会接收最新的数据
  6. configuration改变,会立即更新数据
  7. 共享资源:一个系统服务,使用单例模式+LiveData扩展它,在其他程序中共享这个服务

基本使用

基本参与者就是ViewModel,UI,LiveData,以及LifecycleOwner,观察者

  1. ViewMode与之前不一样,之前ViewModel内部是Model,现在是LiveData,不过指定了LiveData关联的Model

     public class LiveDataModel extends ViewModel {
     	private MutableLiveData<User> user;
    
         /**
          * 提供一个获取LiveData的方法
          * @return
          */
     	public MutableLiveData<User> getUser() {
         	if (user == null) {
             	user = new MutableLiveData<User>();
         	}
         	return user;
     	}
    

    }

  2. LifecycleOwner对象,一般的继承AppCompatActivity的Activity就是LifecycleOwner子类

  3. UI页面通过ViewModelProviders获取ViewModel,然后通过ViewModel获取到包含的LiveData,将LiveData添加到页面的生命周期观察列表中

     // 获取ViewModel
     LiveDataModel model = ViewModelProviders.of(this).get(LiveDataModel.class);
     // 获取到LiveData添加到生命周期观察列表中,只在UI启动的时候执行一次
     model.getUser().observe(this, new Observer<User>() {
         // 数据改变的时候回调
         @Override
         public void onChanged(@Nullable User user) {
    
         }
     });
     // 更新数据
     // model.getUser().postValue(new User("lvInName", "lvOutName"));
     model.getUser().setValue(new User("lvInName", "lvOutName"));
    

使用postValue和setValue都可以,区别在于:

  1. set这个方法必须在主线程中调用
  2. 如果要在子线程中调用需要使用post方法

基本参与者和关系

在这里插入图片描述
在UI中,为LiveData添加观察者,UI就是观察者持有者。

LiveData的数据转换

将拿到的元数据进行转换要在LiveData中进行,可以参考:https://www.jianshu.com/p/44f67f4fa760

使用时的小坑

liveData.observe(this, Observer {....}

内部的onchange方法,触发方法是livedata设置新的value。如果只是单纯的获取到value,然后修改某一个属性值的话,不会触发

由此又想到dataBinding,测试,dataBinding的刷新也是重新赋值刷新,而不能是获取值后修改某个属性,这样是不会触发刷新的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值