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

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




本文转自 Luoshengyang 51CTO博客,原文链接:http://blog.51cto.com/shyluo/967022,如需转载请自行联系原作者
目录
相关文章
|
1天前
|
缓存 移动开发 Android开发
构建高效Android应用:从优化用户体验到提升性能表现
【4月更文挑战第18天】 在移动开发的世界中,打造一个既快速又流畅的Android应用并非易事。本文深入探讨了如何通过一系列创新的技术策略来提升应用性能和用户体验。我们将从用户界面(UI)设计的简约性原则出发,探索响应式布局和Material Design的实践,再深入剖析后台任务处理、内存管理和电池寿命优化的技巧。此外,文中还将讨论最新的Android Jetpack组件如何帮助开发者更高效地构建高质量的应用。此内容不仅适合经验丰富的开发者深化理解,也适合初学者构建起对Android高效开发的基础认识。
2 0
|
1天前
|
移动开发 Android开发 开发者
构建高效Android应用:采用Kotlin进行内存优化的策略
【4月更文挑战第18天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,由于设备和版本的多样性,确保应用流畅运行且占用资源少是一大挑战。本文将探讨使用Kotlin语言开发Android应用时,如何通过内存优化来提升应用性能。我们将从减少不必要的对象创建、合理使用数据结构、避免内存泄漏等方面入手,提供实用的代码示例和最佳实践,帮助开发者构建更加高效的Android应用。
5 0
|
3天前
|
缓存 移动开发 Java
构建高效的Android应用:内存优化策略
【4月更文挑战第16天】 在移动开发领域,尤其是针对资源有限的Android设备,内存优化是提升应用性能和用户体验的关键因素。本文将深入探讨Android应用的内存管理机制,分析常见的内存泄漏问题,并提出一系列实用的内存优化技巧。通过这些策略的实施,开发者可以显著减少应用的内存占用,避免不必要的后台服务,以及提高垃圾回收效率,从而延长设备的电池寿命并确保应用的流畅运行。
|
5天前
|
搜索推荐 开发工具 Android开发
安卓即时应用(Instant Apps)开发指南
【4月更文挑战第14天】Android Instant Apps让用户体验部分应用功能而无需完整下载。开发者需将应用拆分成模块,基于已上线的基础应用构建。使用Android Studio的Instant Apps Feature Library定义模块特性,优化代码与资源以减小模块大小,同步管理即时应用和基础应用的版本。经过测试,可发布至Google Play Console,提升用户便利性,创造新获客机会。
|
6天前
|
Java API 调度
安卓多线程和并发处理:提高应用效率
【4月更文挑战第13天】本文探讨了安卓应用中多线程和并发处理的优化方法,包括使用Thread、AsyncTask、Loader、IntentService、JobScheduler、WorkManager以及线程池。此外,还介绍了RxJava和Kotlin协程作为异步编程工具。理解并恰当运用这些技术能提升应用效率,避免UI卡顿,确保良好用户体验。随着安卓技术发展,更高级的异步处理工具将助力开发者构建高性能应用。
|
6天前
|
编解码 人工智能 测试技术
安卓适配性策略:确保应用在不同设备上的兼容性
【4月更文挑战第13天】本文探讨了提升安卓应用兼容性的策略,包括理解平台碎片化、设计响应式UI(使用dp单位,考虑横竖屏)、利用Android SDK的兼容工具(支持库、资源限定符)、编写兼容性代码(运行时权限、设备特性检查)以及优化性能以适应低端设备。适配性是安卓开发的关键,通过这些方法可确保应用在多样化设备上提供一致体验。未来,自动化测试和AI将助力应对设备碎片化挑战。
|
12天前
|
移动开发 API Android开发
构建高效Android应用:探究Kotlin协程的优势与实践
【4月更文挑战第7天】 在移动开发领域,性能优化和应用响应性的提升一直是开发者追求的目标。近年来,Kotlin语言因其简洁性和功能性在Android社区中受到青睐,特别是其对协程(Coroutines)的支持,为编写异步代码和处理并发任务提供了一种更加优雅的解决方案。本文将探讨Kotlin协程在Android开发中的应用,揭示其在提高应用性能和简化代码结构方面的潜在优势,并展示如何在实际项目中实现和优化协程。
|
21天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
97 0
|
1月前
|
设计模式 人工智能 开发工具
安卓应用开发:构建未来移动体验
【2月更文挑战第17天】 随着智能手机的普及和移动互联网技术的不断进步,安卓应用开发已成为一个热门领域。本文将深入探讨安卓平台的应用开发流程、关键技术以及未来发展趋势。通过分析安卓系统的架构、开发工具和框架,本文旨在为开发者提供全面的技术指导,帮助他们构建高效、创新的移动应用,以满足不断变化的市场需求。
18 1