Android开发——LiveData实现原理

本文详细剖析了Android LiveData的内部工作原理,包括`activeStateChanged`方法、数据发送的简易流程,如`postValue`如何利用主线程Handler发送数据,以及`setValue`、`dispatchingValue`和`considerNotify`在数据传递中的作用。通过分析,揭示了LiveData如何确保在组件活动状态下正确地分发数据,以及粘性事件的处理机制。
摘要由CSDN通过智能技术生成

mOwner.getLifecycle().removeObserver(this);

}

}

3.3 activeStateChanged 方法


  • ObserverWrapper 这个类里面有个方法,后面的粘性事件会用到,先看看。

void activeStateChanged(boolean newActive) {

//组件状态如果不变返回

if (newActive == mActive) {

return;

}

// immediately set active state, so we’d never dispatch anything to inactive

// owner

mActive = newActive;

changeActiveCounter(mActive ? 1 : -1);

//如果是活动的就发送数据

if (mActive) {

dispatchingValue(this);

}

}

3.4 简易流程图


LiveData注册

4.发送数据分析

======================================================================

4.1 postValue 发送数据到主线程


  • 这个方法最核心的就是利用主线程Handler发送数据,一步步拆开分析,看看他是怎么写的。

protected void postValue(T value) {

boolean postTask;

//加锁

synchronized (mDataLock) {

postTask = mPendingData == NOT_SET;

//保存要发送的数据value

mPendingData = value;

}

if (!postTask) {

return;

}

//利用主线程Handler发送

ArchTaskExecutor.getInstance().postToMainThread(mPostValueRunnable);

}

4.2 postValue 其实就是 setValue


  • 在postValue 要发送的 Runnable ,可以看到最后一行就是 setValue 方法,数据也即是之前保存的mPendingData ,只是在这又给 newValue。

private final Runnable mPostValueRunnable = new Runnable() {

@SuppressWarnings(“unchecked”)

@Override

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值