本文共 2332 字,大约阅读时间需要 7 分钟。
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) { -
-
-
-
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 { -
-
-
public NotificationRunnable(boolean self) { -
-
-
-
-
ContentObserver.this.onChange(mSelf); -
-
-
-
-
这个函数就直接调用ContentObserver的子类的onChange函数来处理这个数据更新通知了。在我们这个情景中,这个ContentObserver子类便是ArticlesObserver了。 Step 7. ArticlesObserver.onChange 这个函数定义在前面一篇文章 介绍的应用程序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 { -
-
-
-
public void onChange (boolean selfChange) { -
adapter.notifyDataSetChanged(); -
-
-
-
-
这里它要执行的操作便是更新界面上的ListView列表中的文章信息了,以便反映ArticlesProvider中的最新数据。 这样,Android应用程序组件Content Provider的共享数据更新通知机制就分析完了,整个Android应用程序组件Content Provider的学习也结束了,重新学习请回到 一文。 本文转自 Luoshengyang 51CTO博客,原文链接:http://blog.51cto.com/shyluo/967022,如需转载请自行联系原作者