使用不介绍
一、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回调有三种方式
- 第一种 Message.callback 其实就是一个Runnable 对象(不是线程)
- 第二种 new Handler的时候 传入的Callback参数 (实现接口)
- 第三种 实现handleMessage
这里很明显就是 msg.callback 不为null 执行handleCallback(msg)其实就是执行 callback.run,mPostValueRunnable里的run方法 执行setValue