Android-JetpackAndroid技术知识

LiveData的分析与简单使用

2019-01-16  本文已影响486人  TastyDeath
xianyu.gif

}
```

//传入参数是Observer,有的话就分发给它,为null就对所有Observers分发数据
void dispatchingValue(@Nullable ObserverWrapper initiator) {
  //如果正在分发数据,就标记为分发无效,分发中的会因此跳出循环
   if (mDispatchingValue) {
     //标记为分发无效
       mDispatchInvalidated = true;
       return;
   }
   //标记为分发中
   mDispatchingValue = true;
   do {
       mDispatchInvalidated = false;
       if (initiator != null) {
           considerNotify(initiator);
           initiator = null;
       } else {
           for (Iterator<Map.Entry<Observer<? super T>, ObserverWrapper>> iterator =
                   mObservers.iteratorWithAdditions(); iterator.hasNext(); ) {
                //尝试分发
               considerNotify(iterator.next().getValue());
               //标记为无效时会跳出循环,在while循环中等待一次mDispatchInvalidated再次变为true时再次进入for循环
               if (mDispatchInvalidated) {
                   break;
               }
           }
       }
       //没有被标记无效时while循环就执行一次完事,否则会再次执行
   } while (mDispatchInvalidated);
   mDispatchingValue = false;
}
            @Override
            boolean shouldBeActive() {
                return mOwner.getLifecycle().getCurrentState().isAtLeast(STARTED);
            }
mActive会在生命周期变化时会被多次检查
2. 第二步再次检查`shouldBeActive()`状态
3. 第三步检查`mLastVersion`和`mVersion`  
    这个version是在setValue时被+1的,检查一下防止重复分发,完成后修改lastVersion然后回调`onChange(T)`
上一篇 下一篇

猜你喜欢

热点阅读