mOwner.getLifecycle().removeObserver(this);
}
}
- 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);
}
}
======================================================================
- 这个方法最核心的就是利用主线程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);
}
- 在postValue 要发送的 Runnable ,可以看到最后一行就是 setValue 方法,数据也即是之前保存的mPendingData ,只是在这又给 newValue。
private final Runnable mPostValueRunnable = new Runnable() {
@SuppressWarnings(“unchecked”)
@Override