1.前言
- 2018年谷歌I/O 发布了一系列辅助android开发者的实用工具,合称 Jetpack ,以帮助开发者构建出色的 Android 应用。
- Jetpack 包含4个部分的组件:Architecture、Foundation、Behavior 以及 UI 。
- 今天为大家介绍的是 Architecture 中
LiveData
。 - 文章中实例 linhaojian的Github
2.简介
- 介绍 :
LiveData是一个有生命周期感知 & 可观察的数据持有者类。 - 作用:
1.持久化的观察数据的更改与变化 & 及时通知UI更新。 - 特点:
1.感知对应Activity的生命周期,只有生命周期处于onStart与onResume时,LiveData处于活动状态,才会把更新的数据通知至对应的Activity。
2.当生命周期处于onStop或者onPause时,不回调数据更新,直至到生命周期为onResume时,立即回调。
3.当生命周期处于onDestory时,观察者会自动删除,防止内存溢出。
4.共享资源。您可以使用单例模式扩展LiveData
对象以包装系统服务,以便可以在应用程序中共享它们。LiveData
对象连接到系统服务一次,然后任何需要该资源的观察者都可以只观看LiveData
对象。
3.原理
-
执行流程
- 类分析
- 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_简书!
不定期分享关于安卓开发的干货。
写技术文章初心
- 技术知识积累
- 技术知识巩固
- 技术知识分享
- 技术知识交流