Android Jetpack - LiveData 介绍

作者: Linhaojian | 来源:发表于2018-12-04 10:37 被阅读218次
    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_简书

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


    写技术文章初心

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

    相关文章

      网友评论

        本文标题:Android Jetpack - LiveData 介绍

        本文链接:https://www.haomeiwen.com/subject/lhvzqqtx.html