Step 4. Transport.onChange 这个函数定义在frameworks/base/core/java/android/database/ContentObserver.java文件中:
  1. publicabstractclassContentObserver{
  2. ......
  3. privatestaticfinalclassTransportextendsIContentObserver.Stub{
  4. ContentObservermContentObserver;
  5. ......
  6. publicvoidonChange(booleanselfChange){
  7. ContentObservercontentObserver=mContentObserver;
  8. if(contentObserver!=null){
  9. contentObserver.dispatchChange(selfChange);
  10. }
  11. }
  12. ......
  13. }
  14. ......
  15. }
前面我们在分析ContentObserver的注册过程的Step3时,把ArticlesObserver这个ContentObserver保存在了这个Transport对象的mContentObserver成员变量中,因此,会调用它的dispatchChange函数来执行数据更新通知的操作。 Step 5.ContentObserver.dispatchChange 这个函数定义在frameworks/base/core/java/android/database/ContentObserver.java文件中:
  1. publicabstractclassContentObserver{
  2. ......
  3. publicfinalvoiddispatchChange(booleanselfChange){
  4. if(mHandler==null){
  5. onChange(selfChange);
  6. }else{
  7. mHandler.post(newNotificationRunnable(selfChange));
  8. }
  9. }
  10. }
在前面分析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文件中:
  1. publicabstractclassContentObserver{
  2. ......
  3. privatefinalclassNotificationRunnableimplementsRunnable{
  4. privatebooleanmSelf;
  5. publicNotificationRunnable(booleanself){
  6. mSelf=self;
  7. }
  8. publicvoidrun(){
  9. ContentObserver.this.onChange(mSelf);
  10. }
  11. }
  12. ......
  13. }
这个函数就直接调用ContentObserver的子类的onChange函数来处理这个数据更新通知了。在我们这个情景中,这个ContentObserver子类便是ArticlesObserver了。 Step 7.ArticlesObserver.onChange 这个函数定义在前面一篇文章 Android应用程序组件Content Provider应用实例 介绍的应用程序Artilce源代码工程目录下,在文件为packages/experimental/Article/src/shy/luo/article/MainActivity.java中:
  1. publicclassMainActivityextendsActivityimplementsView.OnClickListener,AdapterView.OnItemClickListener{
  2. ......
  3. privateclassArticleObserverextendsContentObserver{
  4. ......
  5. @Override
  6. publicvoidonChange(booleanselfChange){
  7. adapter.notifyDataSetChanged();
  8. }
  9. }
  10. ......
  11. }
这里它要执行的操作便是更新界面上的ListView列表中的文章信息了,以便反映ArticlesProvider中的最新数据。 这样,Android应用程序组件Content Provider的共享数据更新通知机制就分析完了,整个Android应用程序组件Content Provider的学习也结束了,重新学习请回到 Android应用程序组件Content Provider简要介绍和学习计划一文。

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. 箭头函数的基础使用
  3. python起点网月票榜字体反爬案例
  4. Python技巧匿名函数、回调函数和高阶函数
  5. Android(安卓)获取已经安装的程序
  6. android左右滑动加载分页以及动态加载数据
  7. android Sqlite多线程访问异常解决方案
  8. Android应用程序编译问题
  9. Android(安卓)API 中文(76)——AdapterView.OnItemLongClickListen

随机推荐

  1. Android--WindowManager.LayoutParams(下
  2. Android中如何设置边框
  3. Kotlin 配置dataBinding
  4. Android面试题(25)-Bundle机制
  5. android 物理键盘 关键因素
  6. 【Android】二、HelloWorld
  7. Android横竖屏切换Activity生命周期变化
  8. android studio错误: 常量字符串过长
  9. 【Android】【配置文件】gradle和manifes
  10. Android发送邮件,并弹出邮箱类应用供选择