livedata基本理解

185 阅读1分钟

livedata是一个可被观察的数据持有类。它内部集成了lifecycle,因此也具备了生命周期感知能力。当livedata持有的数据发生改变的时候,livedata会通知生命周期处于started或者resumed的观察者,更新数据。

注册: livedata用法,livedata.observe(lifecycleowner,observe)。两个参数参数会被封装成LifecycleBoundObserver对象,然后存入SafeInteratorMap中,并且调用owner.getLifecycle().addObserver(wrapper),赋予生命周期。

通知: livedata是一个abstract类,我们可以用multablelivedata,该类提供了setvalue(主线程调用)和postvalue(主线程子线程都可以用,如果在子线程调用会post到main thread,然后最终会调用到setvalue)来更新livedata持有的数据。setvalue中会调用dispatchingValue,该方法会遍历mObservers取出ObserverWrapper,并调用considerNotify方法,该方法会调用更新数据方法observer.mObserver.onChanged((T) mData)。