LiveData 源码分析(一)

使用不介绍

一、postValue 如何执行到主线程中

1.LiveData - postValue

在这里插入图片描述
ArchTaskExecutor 执行一个Runnable 对象
在这里插入图片描述
Runnable 对象中调用 了setValue 方法 (主要是 在哪去执行了切换线程)

2.ArchTaskEexcutor - postToMainThread方法

在这里插入图片描述
mDelegate 是 DefaultTaskExecutor
在这里插入图片描述
这里为什么做了多重封装?暂时还不知道 ArchTaskExecutor中其他方法的使用地方

DefaultTaskExecutor 重点
在这里插入图片描述
其实就是调用Handler post 执行到主线程

3.Handler

在这里插入图片描述
这里 getPostMessage(r) 返回了一个Message对象 并且设置了msg.callback = r
接下来就是发送消息到MessageQueue ,到目前为止这里都是异步线程在执行,等到主线程 Looper获取到消息会调用Handler.dispatchMessage (需要单独写一篇关于 Looper MessageQueue Handler机制)
在这里插入图片描述
因为Looper是主线程中,所以 handler的回调都是在主线程中,handler回调有三种方式

  1. 第一种 Message.callback 其实就是一个Runnable 对象(不是线程)
  2. 第二种 new Handler的时候 传入的Callback参数 (实现接口)
  3. 第三种 实现handleMessage

这里很明显就是 msg.callback 不为null 执行handleCallback(msg)其实就是执行 callback.run,mPostValueRunnable里的run方法 执行setValue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值