Android之列表中的数据观察刷新机制
前言:说错或者我理解不好的地方,请您们尽管喷。最好能补上Demo方便交流\(^o^)/
public abstract class DataSetObserver { public void onChanged() { // Do nothing } public void onInvalidated() { // Do nothing } }
被观察者实现了Observable这个类,重写了notifyChanged和notifyInvalidate方法,直接看源码就明白了
public class DataSetObservable extends Observable<DataSetObserver> { public void notifyChanged() { synchronized(mObservers) {//mObservers是在父类的成员变量,是Arraylist类型的,用来存放一系列的观察者。因为观察者是可以多个的嘛,所以有集合保存所以的观察者 for (int i = mObservers.size() - 1; i >= 0; i--) { mObservers.get(i).onChanged();//调用所有注册的Observer的onChange方法 } } } public void notifyInvalidated() { synchronized (mObservers) { for (int i = mObservers.size() - 1; i >= 0; i--) { mObservers.get(i).onInvalidated();//调用所有注册的Observer的onInvalidate方法 } } } }
那么这套机制如何工作的呢?一切都在BaseAdpater里面,BaseAdpater在一创建就持有了一个DataSetObservable对象,仅仅持有改对象还不够,BaseAdapter提供了注册Observer的方法,其实底层就是调用DataSetObservable的注册方法而已,注册了Observer之后,观察者模式基本配置完成了。当数据改变的时候,调用BaseAdpater的notifyDataSetChange()方法,这个方法底层就是调用DataSetObservable的notifyChange方法而已,notifyChange方法中又调用DataSetObserver的onChange方法。这样形成了观察通知了。
好啦,以上是Android数据观察的分析。