Android之列表中的数据观察刷新机制

前言:说错或者我理解不好的地方,请您们尽管喷。最好能补上Demo方便交流\(^o^)/

Android提供了一套数据观察的机制,这套机制是用在baseAdapter里的。先了解以下观察者和被观察者是哪两个类把,DataSetObserver(观察者)和DataSetObservable(被观察者)。观察者类是个抽象类,它就只有两个方法。onChange和onInvalidate。看看源码就知道了
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之列表中的数据观察刷新机制
好啦,以上是Android数据观察的分析。