您的位置:首页 > 移动开发 > Android开发

Android应用程序组件Content Provider的共享数据更新通知机制分析(4)

2011-12-12 00:58 741 查看
Step 4. Transport.onChange
这个函数定义在frameworks/base/core/java/android/database/ContentObserver.java文件中:

public abstract class ContentObserver {

......

private static final class Transport extends IContentObserver.Stub {

ContentObserver mContentObserver;

......

public void onChange(boolean selfChange) {

ContentObserver contentObserver = mContentObserver;

if (contentObserver != null) {

contentObserver.dispatchChange(selfChange);

}

}

......

}

......

}

前面我们在分析ContentObserver的注册过程的Step 3时,把ArticlesObserver这个ContentObserver保存在了这个Transport对象的mContentObserver成员变量中,因此,会调用它的dispatchChange函数来执行数据更新通知的操作。

Step 5. ContentObserver.dispatchChange
这个函数定义在frameworks/base/core/java/android/database/ContentObserver.java文件中:

public abstract class ContentObserver {

......

public final void dispatchChange(boolean selfChange) {

if (mHandler == null) {

onChange(selfChange);

} else {

mHandler.post(new NotificationRunnable(selfChange));

}

}

}

在前面分析ArticlesObserver的注册过程时,我们以应用程序Article的主线程的消息循环创建了一个Handler,并且以这个Handler来创建了这个ArticlesObserver,这个Handler就保存在ArticlesObserver的父类ContentObserver的成员变量mHandler中。因此,这里的mHandler不为null,于是把这个数据更新通知封装成了一个消息,放到应用程序Article的主线程中去处理,最终这个消息是由NotificationRunnable类的run函数来处理的。

Step 6. NotificationRunnable.run
这个函数定义在frameworks/base/core/java/android/database/ContentObserver.java文件中:

public abstract class ContentObserver {

......

private final class NotificationRunnable implements Runnable {

private boolean mSelf;

public NotificationRunnable(boolean self) {

mSelf = self;

}

public void run() {

ContentObserver.this.onChange(mSelf);

}

}

......

}

这个函数就直接调用ContentObserver的子类的onChange函数来处理这个数据更新通知了。在我们这个情景中,这个ContentObserver子类便是ArticlesObserver了。

Step 7. ArticlesObserver.onChange
这个函数定义在前面一篇文章Android应用程序组件Content Provider应用实例介绍的应用程序Artilce源代码工程目录下,在文件为packages/experimental/Article/src/shy/luo/article/MainActivity.java中:

public class MainActivity extends Activity implements View.OnClickListener, AdapterView.OnItemClickListener {

......

private class ArticleObserver extends ContentObserver {

......

@Override

public void onChange (boolean selfChange) {

adapter.notifyDataSetChanged();

}

}

......

}

这里它要执行的操作便是更新界面上的ListView列表中的文章信息了,以便反映ArticlesProvider中的最新数据。

这样,Android应用程序组件Content Provider的共享数据更新通知机制就分析完了,整个Android应用程序组件Content Provider的学习也结束了,重新学习请回到Android应用程序组件Content Provider简要介绍和学习计划一文。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐