Observable是观察者模式的典型应用。在Android下,Observable是一个泛型的抽象类,表示一个观察者对象,提供了观察者注册、反注册及清空三个方法,其源码如下:

[java]view plaincopy
  1. publicabstractclassObservable<T>{
  2. protectedfinalArrayList<T>mObservers=newArrayList<T>();
  3. publicvoidregisterObserver(Tobserver){
  4. if(observer==null){
  5. thrownewIllegalArgumentException("Theobserverisnull.");
  6. }
  7. synchronized(mObservers){
  8. if(mObservers.contains(observer)){
  9. thrownewIllegalStateException("Observer"+observer+"isalreadyregistered.");
  10. }
  11. mObservers.add(observer);
  12. }
  13. }
  14. publicvoidunregisterObserver(Tobserver){
  15. if(observer==null){
  16. thrownewIllegalArgumentException("Theobserverisnull.");
  17. }
  18. synchronized(mObservers){
  19. intindex=mObservers.indexOf(observer);
  20. if(index==-1){
  21. thrownewIllegalStateException("Observer"+observer+"wasnotregistered.");
  22. }
  23. mObservers.remove(index);
  24. }
  25. }
  26. publicvoidunregisterAll(){
  27. synchronized(mObservers){
  28. mObservers.clear();
  29. }
  30. }
  31. }

Observable的直接继承者有两个:DataSetObservable和ContentObservable。ContentObservable实现比较复杂,不过功能与DataSetObservable类似,这里只讲解DataSetObservable。

DataSetObservable在很多的Adapter中都用到,像BaseAdapter。DataSetObservable使用DataSetObserver实例化了Observable。DataSetObserver表示了一个数据集对象的观察者,主要提供了两个方法:

[java]view plaincopy
  1. publicabstractclassDataSetObserver{
  2. publicvoidonChanged(){
  3. //Donothing
  4. }
  5. publicvoidonInvalidated(){
  6. //Donothing
  7. }
  8. }

DataSetObservable实现如下:

[java]view plaincopy
  1. publicclassDataSetObservableextendsObservable<DataSetObserver>{
  2. publicvoidnotifyChanged(){
  3. synchronized(mObservers){
  4. for(DataSetObserverobserver:mObservers){
  5. observer.onChanged();
  6. }
  7. }
  8. }
  9. publicvoidnotifyInvalidated(){
  10. synchronized(mObservers){
  11. for(DataSetObserverobserver:mObservers){
  12. observer.onInvalidated();
  13. }
  14. }
  15. }
  16. }

当数据集有变化时,会调用DataSetObserver的onChanged()方法;当数据集失效时,会调用DataSetObserver的onINvalidated()方法。

Android中的观察者DataSetObservable和DataSetObserver相关推荐

  1. android观察者模式被观察者,Android的设计模式-观察者模式

    前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中: 1.定义 定义对象间的一种一个对多的依赖关系,当一个对象的状态发送改变时,所以依赖于它的对象都得到通知并被自动更新. 2.介绍 观察 ...

  2. Android中常用的设计模式

    一:参考文档 先介绍参考文档(或许我们更容易明白):另记录本人可参考 QQ15 MobileSafe 两个Demo 有哪些在实际 Android 项目中用到的设计模式? Android开发中常见的设计 ...

  3. android Java开发设计模式及在android中的应用解析

    android Java开发设计模式及在android中的应用解析 什么是设计模式: 可以用一句话概括设计模式---设计模式是一种利用OOP的封闭.继承和多态三大特性,同时在遵循单一职责原则.开闭原则 ...

  4. Android中的跨进程通信方法实例及特点分析(二):ContentProvider

    1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据,Android系统给我们提供了Content P ...

  5. RxJava 在Android中的应用(一)

    RxJava 在Android中的应用 RxJava 是什么, 能解决什么问题 对比其他技术理解为什么要选择RxJava RxJava的相关API RxJava在Android中的典型使用场景 RxJ ...

  6. 彻底理解 Android 中的阴影

    如果我们想创造更好的 Android App,我相信我们需要遵循 Material Design 的设计规范.一般而言,Material Design 是一个包含光线,材质和投影的三维环境.如果我们想 ...

  7. Android 中 RegistrantList消息处理机制 以android 5.0 MT为例

    这其实是观察者模式的一种实现形式 先明确两个身份 1.RefistrantList 通知者 2.Registrant 观察者,这是一个一对多的关系,在有事件更新时,凡是在名单上登记过的对象,都会收到通 ...

  8. Android学习四、Android中的Adapter

    一.Adapter的介绍 An Adapter object acts as a bridge between an AdapterView and the underlying data for t ...

  9. 彻底理解 Android 中的阴影 1

    如果我们想创造更好的 Android App,我相信我们需要遵循 Material Design 的设计规范.一般而言,Material Design 是一个包含光线,材质和投影的三维环境.如果我们想 ...

最新文章

  1. java中的匿名类方法覆盖_Java技巧:用匿名类来实现简化程序调试
  2. 论文整理集合 -- 吴恩达老师深度学习课程
  3. 前端框架 渐进式框架
  4. mt6765和骁龙665哪个好_骁龙665+5000毫安大电池不到千元,手机厂商还要怎么玩?...
  5. PAT 1037. 在霍格沃茨找零钱
  6. 【报告分享】85后、95后宝妈人群洞察报告.pdf(附下载链接)
  7. Swift 简单的通讯录
  8. Machine type的匹配
  9. paip.提升用户体验与安全性----登录与权限流程总结
  10. QListView 的高性能加载方案
  11. flac转mp3方法,flac转mp3步骤
  12. 数组unshift方法及重构
  13. 美团餐饮SaaS基于StarRocks构建商家数据中台的探索
  14. Kafka消息偏移量的演变
  15. 渗透测试工具篇——sqlmap
  16. #Paper reading#DeepInf: Social Influence Prediction with Deep Learning
  17. 短视频营销的3个重点:KOL化+话题性+深度互动
  18. Java Bean 转 Map 的巨坑,注意了!!!
  19. Mongodb关于读取的问题(Read Concern)和Write Concern
  20. pythoniter雪峰_[雪峰磁针石博客]python3快速入门教程1 turtle绘图-3循环

热门文章

  1. 在C#中??和?分别是什么意思?
  2. shell脚本实例-命令记录
  3. windows 下eclipse 连HBASE
  4. Server系列18:如何通过组策略赋予domain user受限网络管理权限?
  5. JVM和GC知识点整理
  6. 2018年7月3日笔记
  7. Python的几种实现
  8. Uber从Postgres切换到MySQL
  9. 区块链开发中的9大应用场景
  10. 最课程学员启示录:一份有诚意的检讨书