Android进阶 ——— Android官方架构组件LiveData

上一篇文章,学习了Android官方架构组件的第一部分Android进阶 ——— Android官方架构组件Lifecycle

初探

LiveData 是一个可以感知 Activity 、Fragment生命周期的数据容器。当 LiveData 所持有的数据改变时,它会通知相应的界面代码进行更新。同时,LiveData 持有界面代码 Lifecycle 的引用,这意味着它会在界面代码(LifecycleOwner)的生命周期处于 started 或 resumed 时作出相应更新,而在 LifecycleOwner 被销毁时停止更新。

  • 意味着LiveData可以被观察者订阅,并且感知LifeCycleOwner组件的生命周期。
  • 如果LifecycleOwner的状态为Lifecycle.State.STARTEDLifecycle.State.RESUMED,才会通知观察者更新
  • 可以通过observeForever(Observer)添加的观察者,使其始终处于活动状态,不仅仅是处于活跃状态。但是这种方式添加的观察者,需要手动调用removeObserver(Observer)解除

上面的描述介绍了LiveData的优点:不用手动控制生命周期,不用担心内存泄露,数据变化时会收到通知。

不仅如此,官方推荐,LiveData和Viewmodel搭配使用,ViewModel是Android官方构件的另一成员。

ViewModel 将视图的数据和逻辑从具有生命周期特性的实体(如 Activity 和 Fragment)中剥离开来。直到关联的 Activity 或 Fragment 完全销毁时,ViewModel 才会随之消失,也就是说,即使在旋转屏幕导致 Fragment 被重新创建等事件中,视图数据依旧会被保留。ViewModels 不仅消除了常见的生命周期问题,而且可以帮助构建更为模块化、更方便测试的用户界面。

ViewModel的优点:为Activity 、Fragment存储数据,直到完全销毁。尤其是屏幕旋转的场景,常用的方法都是通过onSaveInstanceState()保存数据,再在onCreate()中恢复,真的是很麻烦。
其次因为ViewModel存储了数据,所以ViewModel可以在当前Activity的Fragment中实现数据共享。

使用

LiveData有几种使用方式:
- 使用LiveData对象
- 继承LiveData

1.使用LiveData对象

  使用LiveData对象主要有以下几个步骤:

  • 创建保存特定数据类型的LiveData实例(ViewModel中);
  • 创建Observer对象,作为参数传入LiveData.observe()方法,添加观察者;
  • 通过 observe()方法连接观察者和LiveData。observe()方法需要携带一个LifecycleOwner类。这样就可以让观察者订阅LiveData中的数据;
创建LiveData实例,一般继承自MutableLiveData

MutableLiveData是LiveData的子类,添加了公共方法setValue和postValue,方便开发者直接使用。setValue必须在主线程调用。postValue可以在后台线程中调用。

/**
 * Created by dai
 * Created time 2018/8/20
 * function:lifecycle.example.com.lifecycleexample.LifeCycle
 */

public class MainViewModel  extends ViewModel{
   


    private MutableLiveData<Student> student =  new MutableLiveData<>();

    public MutableLiveData<Student> getStudent() {
        return student;
    }

    public void addStudent(){
        Student student1 = new Student();
        student1.setGender(55);
        student1.setName("zhangsan");
        student.setValue(student1);
    }

}
创建Observer对象,作为参数添加观察者

通过LiveData.observe()方法添加观察者,当数据变化时会通过回调方法通知观察者

/**
 * Created by dai
 * Created time 2018/8/20
 * function:lifecycle.example.com.lifecycleexample
 */

public class MainActivity extends AppCompatActivity {
   

    private MainPresenter presenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        presenter = 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值