Architecture Components推出1.0稳定版后直接让SupportActivity实现了LifecycleOwner接口,不需要我们先以前一样继承LivecycleActivity了,只要是SupportActivity的子类都是一个LifecycleOwner

public class SupportActivity extends Activity implements LifecycleOwner {//...
}

几个特性

1.如果liveData中已经持有数据,那么 后面添加进来的observer会立即触发onChange(T t)方法,把前面的数据发送出去

public interface Observer<T> {void onChanged(@Nullable T t);
}

2.设置数据的如下两种方式

protected void postValue(T value) {//....}
protected void setValue(T value) {//....}

setValue(T value)要求在Ui线程中调用,如果在子线程调用会报错。在子线程需要更新数据的话要调用postValue(T value),其实这个方法实际上也是调用了setValue方法的

protected void postValue(T value) {//...ArchTaskExecutor.getInstance().postToMainThread(mPostValueRunnable);}

可以看到,在最后他将一个Runnable调度到主线程去执行,mPostValueRunnable如下

public void run() {//...setValue((T) newValue);}

postValue(T value)内部切换线程就一定会增加延迟,所以就印证文档中说的,在主线程执行如下代码,liveData中的数据会先变为b然后变为a

liveData.postValue("a");
liveData.setValue("b");

那么照上面所说,postValue(T value)有一定延迟的话,短时间内一直触发该方法会不会造成任务堆叠呢?我们再来看一看源码

protected void postValue(T value) {boolean postTask;synchronized (mDataLock) {postTask = mPendingData == NOT_SET;mPendingData = value;}if (!postTask) {return;}ArchTaskExecutor.getInstance().postToMainThread(mPostValueRunnable);}

看以看出,postTask为假即 mPendingData != NOT_SET时就不会产生新的调度了,NOT_SET就是一个Object,而mPendingData 在初始化时赋值为NOT_SET

//初始化
private static final Object NOT_SET = new Object();
private volatile Object mPendingData = NOT_SET;

在调用postValuemPendingData 就已经不是NOT_SET了,因此如果一直调用postValue的话是不会产生任务堆叠的。那什么时候postValue才重新有效呢?再来看看被调度的Runnable

public void run() {Object newValue;synchronized (mDataLock) {newValue = mPendingData;mPendingData = NOT_SET;}//noinspection uncheckedsetValue((T) newValue);}
mPendingData = NOT_SET;

对,就是这时候postValue(T value)重新有效了,所以循环postValue(T value)的效果是每几个调用只有一个有效,上一个调度完成才会产生下一个,并不会堆叠。

初识LiveData相关推荐

  1. Android LiveData初识

    LiveData初识 LiveData is an observable data holder class. Unlike a regular observable, LiveData is lif ...

  2. 关于善恶,好坏的相对论:慈不带兵,义不经商,情不立事,善不为官。

    一 我们都知道:慈不带兵.义不经商,但是很少有人知道下半句是什么! 我们先看上半句的意思吧: 1:仁慈的人为什么不适合带兵打仗? 身为将领,一旦仁慈心软,表面上看好像会避免很多战争,让很多百姓免于战火 ...

  3. Andriod --- JetPack (七):Room + ViewModel + LiveData 增删改查实例

    1.Andriod - JetPack (一):初识 JetPack 2.Andriod - JetPack (二):LifeCycle 的诞生 3.Andriod - JetPack (三):Vie ...

  4. Andriod --- JetPack (五):DataBinding + LiveData +ViewModel 简单实例

    1.Andriod - JetPack (一):初识 JetPack 2.Andriod - JetPack (二):LifeCycle 的诞生 3.Andriod - JetPack (三):Vie ...

  5. Andriod --- JetPack (一):初识 JetPack

    1. Andriod --- JetPack (一):初识 JetPack 2. Andriod --- JetPack (二):LifeCycle 的诞生 3. Andriod --- JetPac ...

  6. day3----编码-集合-深浅copy-文件操作-函数初识

    day3----编码-集合-深浅copy-文件操作-函数初识 本文档主要内容: 一 编码 二 集合 三 深浅copy 四 文件操作 五 函数初识 首先,我们来看看两个字符串的比较 打开cmd,进入do ...

  7. ⑥python模块初识、pyc和PyCodeObject

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  8. 初识java类的接口实现

    初识java类的接口实现 如果两个类之间不存在继承关系,且两个类都想实现同一个接口,两个类都必须实现接口中全部方法,否则报语法错误 如果两个类之间存在继承关系也想实现同一个接口,父类如果实现了某个接口 ...

  9. vba 编辑combobox内容_初识Visual Basic编辑器并建立一段简单的代码

    大家好,从今日开始我正式推出"VBA之EXCEL应用"教程,这个教程是面向初学人员的教程,教程一共三册,十七个章节,从简单的录制宏实现一直讲到窗体的搭建,都是我们在利用EXCEL工 ...

最新文章

  1. 基于运动信息的物体检测(背景差分法、帧间差分法和光流法)。
  2. 矢量图面层和线层相交得到相交后的线层文件(gis相交)
  3. java匿名内部类举例和内部类举例
  4. 无心剑中译雪莱诗14首
  5. linux下补丁制作及打补丁实例
  6. Python程序提示出现File stdin,line 1错误解决方法
  7. NSURLSession访问HTTPS网站
  8. socket 接收和发送缓冲区
  9. 做人要有一颗健康的心
  10. 小游戏学习--获取已发布微信小游戏源码 creator cocos 编译出微信平台代码 喵喵切水果 跑酷
  11. SCC1传输请求(同系统跨Client)
  12. 世界很大,一定要出去看看
  13. java compile_java中compile函数用法
  14. 回首2017,展望2018
  15. 计算机硬盘对考,台式机怎样让进行硬盘对拷(快速批量装机) 台式机让进行硬盘对拷(快速批量装机)的方法...
  16. 腾讯2019秋招--小q爬塔(dp)
  17. 编写并调用平均值函数
  18. 电机控制要点解疑:SPWM,SVPWM和矢量控制
  19. 小波变换比傅里叶变换好在哪里_小波变换与傅里叶变换详解——代码下载——非平稳信号与平稳信号的滤波效果对比
  20. matlab自学笔记一(台大郭彦甫)

热门文章

  1. 移动机器人中的现代控制理论之状态空间表达式
  2. c++ - 第8节 - string类
  3. 「Python 网络自动化」目录汇总
  4. java web中文件类型,java web项目文件上传中常见的mime类型/文件类型校验、验证/只允许特定类型的文件(基于Apache的tika)...
  5. Variable和Tensor的区别
  6. CorelDRAW X6低价再次冲破底线
  7. Android之window机制token验证
  8. 数据与智能融合,新赛道的投资机会如何判断?
  9. E6终极备忘:修复IE6下_25+_Bugs
  10. 嵌入式软件架构设计-状态机