Android LiveData(二):源码分析

有上文对LiveData的基本认识,接下来直接进入LiveData的源码分析,首先进入observer方法,需要注意的是MainActivity继承AppCompatActivity,是LifecycleOwner接口实现类的子孙。而调用observer方法时传入当前MainActivity的上下文,可以理解为owner就是当前的MainActivity。

public void observe(@NonNull LifecycleOwner owner, @NonNull Observer<? super T> observer) {
   
        //判断当前LifecycleOwner即Activity的生命周期状态,如果为DESTROYED就没必要执行了
        if (owner.getLifecycle().getCurrentState() == DESTROYED) {
   
            // ignore
            return;
        }
    	//注释2
    	//对传入的observer封装为LifecycleBoundObserver,类比Handler机制中将Runnable封装为Message
        LifecycleBoundObserver wrapper = new LifecycleBoundObserver(owner, observer);
    	//每次注册一个观察者,就会存放到map集合中
        ObserverWrapper existing = mObservers.putIfAbsent(observer, wrapper);
        if (existing != null && !existing.isAttachedTo(owner)) {
   
            throw new IllegalArgumentException("Cannot add the same observer"
                    + " with different lifecycles");
        }
        if (existing != null) {
   
            return;
        }
    	//注释3
    	//owner就是LifecycleOwner,而我们MainActivity的父类AppCompatActivity 是LifecycleOwner
    	//的实现类ComponentActivity的子类,即给我们的MainActivity注册了一个与声明周期相关的观察者
    	//LifecycleObserver,这样一来就能感知组件的生命周期了。也就是说我们的MainActivity声明周期
        //发生变化的时候,会回调wrapper接口,即回调observer接口,也就是触发观察者中的逻辑
        owner.getLifecycle().addObserver(wrapper);
    }

在注释2处,对观察者observer做了一层封装,集合中保存的是wrapper。注释3处,通过addObserver注册了生命周期的观察监听,到这里我们就大概知道,postValue会触发observer方法,组件即MainActivity生命周期发生变化的时候,也会触发observer方法,具体流程接着往下看。

接下来就从postValue方法发送数据,触发观察者接口回调的流程进行简单分析。进入postValue方法:

protected vo
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值