Android Jetpack - LiveData 介绍

Jetpack.jpg

1.前言

  • 2018年谷歌I/O 发布了一系列辅助android开发者的实用工具,合称 Jetpack ,以帮助开发者构建出色的 Android 应用。
  • Jetpack 包含4个部分的组件:Architecture、Foundation、Behavior 以及 UI
  • 今天为大家介绍的是 ArchitectureLiveData
  • 文章中实例  linhaojian的Github

2.简介

  • 介绍 :
    LiveData是一个有生命周期感知 & 可观察的数据持有者类。
  • 作用:
    1.持久化的观察数据的更改与变化 & 及时通知UI更新。
  • 特点:
    1.感知对应Activity的生命周期,只有生命周期处于onStart与onResume时,LiveData处于活动状态,才会把更新的数据通知至对应的Activity。
    2.当生命周期处于onStop或者onPause时,不回调数据更新,直至到生命周期为onResume时,立即回调。
    3.当生命周期处于onDestory时,观察者会自动删除,防止内存溢出。
    4.共享资源。您可以使用单例模式扩展LiveData对象以包装系统服务,以便可以在应用程序中共享它们。  LiveData对象连接到系统服务一次,然后任何需要该资源的观察者都可以只观看LiveData对象。

3.原理

  • 执行流程
    LiveData原理.png
  • 类分析
      * Observer                                         :  观察者,负责监听数据变化 & 回调。
      * **LifecycleOwner **                              :  感知Activity生命周期的类。
      * LifecycleBoundObserver                :  负责关联Observer与LifecycleOwner。
      * SafeIterableMap                             :  以<Observer,LifecycleBoundObserver>的格式存储多个观察者。

4.基本使用

4.1 MutableLiveData 初始化

LiveData是一个抽象类,所以在使用时,我们需要使用它的实现类 MutableLiveData

public class AViewModel extends ViewModel {
    private MutableLiveData<User> userLiveData = new MutableLiveData<User>();
 }
#### 4.2 Observer注册 
```java
public class ActivityA extends AppCompatActivity {
      //...
     ViewModelProviders.of(this).get(AViewModel.class)
                .getUser().observe(this, new Observer<User>() {
            @Override
            public void onChanged(@Nullable User user) {
                  //获取数据变化
            }
        });
}

4.3 数据变化触发

  • 同步:接收端数据回调与发送端同一个线程。
     userLiveData.setValue(user);
  • 异步:接收端在主线程回调数据。
     userLiveData.postValue(user);

5.总结

  • 到此,LiveData就介绍完成了。后续我会进行分享Jetpack更多其他内容。
  • 如果喜欢我的分享,可以点击  关注  或者  ,你们支持是我分享的最大动力 。
    linhaojian的Github

欢迎关注linhaojian_CSDN博客或者linhaojian_简书

不定期分享关于安卓开发的干货。


写技术文章初心

  • 技术知识积累
  • 技术知识巩固
  • 技术知识分享
  • 技术知识交流

猜你喜欢

转载自blog.csdn.net/qwe851023/article/details/84784557