Android中的观察者DataSetObservable和DataSetObserver
Observable是观察者模式的典型应用。在Android下,Observable是一个泛型的抽象类,表示一个观察者对象,提供了观察者注册、反注册及清空三个方法,其源码如下:
- publicabstractclassObservable<T>{
- protectedfinalArrayList<T>mObservers=newArrayList<T>();
- publicvoidregisterObserver(Tobserver){
- if(observer==null){
- thrownewIllegalArgumentException("Theobserverisnull.");
- }
- synchronized(mObservers){
- if(mObservers.contains(observer)){
- thrownewIllegalStateException("Observer"+observer+"isalreadyregistered.");
- }
- mObservers.add(observer);
- }
- }
- publicvoidunregisterObserver(Tobserver){
- if(observer==null){
- thrownewIllegalArgumentException("Theobserverisnull.");
- }
- synchronized(mObservers){
- intindex=mObservers.indexOf(observer);
- if(index==-1){
- thrownewIllegalStateException("Observer"+observer+"wasnotregistered.");
- }
- mObservers.remove(index);
- }
- }
- publicvoidunregisterAll(){
- synchronized(mObservers){
- mObservers.clear();
- }
- }
- }
Observable的直接继承者有两个:DataSetObservable和ContentObservable。ContentObservable实现比较复杂,不过功能与DataSetObservable类似,这里只讲解DataSetObservable。
DataSetObservable在很多的Adapter中都用到,像BaseAdapter。DataSetObservable使用DataSetObserver实例化了Observable。DataSetObserver表示了一个数据集对象的观察者,主要提供了两个方法:
- publicabstractclassDataSetObserver{
- publicvoidonChanged(){
- //Donothing
- }
- publicvoidonInvalidated(){
- //Donothing
- }
- }
DataSetObservable实现如下:
- publicclassDataSetObservableextendsObservable<DataSetObserver>{
- publicvoidnotifyChanged(){
- synchronized(mObservers){
- for(DataSetObserverobserver:mObservers){
- observer.onChanged();
- }
- }
- }
- publicvoidnotifyInvalidated(){
- synchronized(mObservers){
- for(DataSetObserverobserver:mObservers){
- observer.onInvalidated();
- }
- }
- }
- }
当数据集有变化时,会调用DataSetObserver的onChanged()方法;当数据集失效时,会调用DataSetObserver的onINvalidated()方法。
Android中的观察者DataSetObservable和DataSetObserver相关推荐
- android观察者模式被观察者,Android的设计模式-观察者模式
前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中: 1.定义 定义对象间的一种一个对多的依赖关系,当一个对象的状态发送改变时,所以依赖于它的对象都得到通知并被自动更新. 2.介绍 观察 ...
- Android中常用的设计模式
一:参考文档 先介绍参考文档(或许我们更容易明白):另记录本人可参考 QQ15 MobileSafe 两个Demo 有哪些在实际 Android 项目中用到的设计模式? Android开发中常见的设计 ...
- android Java开发设计模式及在android中的应用解析
android Java开发设计模式及在android中的应用解析 什么是设计模式: 可以用一句话概括设计模式---设计模式是一种利用OOP的封闭.继承和多态三大特性,同时在遵循单一职责原则.开闭原则 ...
- Android中的跨进程通信方法实例及特点分析(二):ContentProvider
1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据,Android系统给我们提供了Content P ...
- RxJava 在Android中的应用(一)
RxJava 在Android中的应用 RxJava 是什么, 能解决什么问题 对比其他技术理解为什么要选择RxJava RxJava的相关API RxJava在Android中的典型使用场景 RxJ ...
- 彻底理解 Android 中的阴影
如果我们想创造更好的 Android App,我相信我们需要遵循 Material Design 的设计规范.一般而言,Material Design 是一个包含光线,材质和投影的三维环境.如果我们想 ...
- Android 中 RegistrantList消息处理机制 以android 5.0 MT为例
这其实是观察者模式的一种实现形式 先明确两个身份 1.RefistrantList 通知者 2.Registrant 观察者,这是一个一对多的关系,在有事件更新时,凡是在名单上登记过的对象,都会收到通 ...
- Android学习四、Android中的Adapter
一.Adapter的介绍 An Adapter object acts as a bridge between an AdapterView and the underlying data for t ...
- 彻底理解 Android 中的阴影 1
如果我们想创造更好的 Android App,我相信我们需要遵循 Material Design 的设计规范.一般而言,Material Design 是一个包含光线,材质和投影的三维环境.如果我们想 ...
最新文章
- java中的匿名类方法覆盖_Java技巧:用匿名类来实现简化程序调试
- 论文整理集合 -- 吴恩达老师深度学习课程
- 前端框架 渐进式框架
- mt6765和骁龙665哪个好_骁龙665+5000毫安大电池不到千元,手机厂商还要怎么玩?...
- PAT 1037. 在霍格沃茨找零钱
- 【报告分享】85后、95后宝妈人群洞察报告.pdf(附下载链接)
- Swift 简单的通讯录
- Machine type的匹配
- paip.提升用户体验与安全性----登录与权限流程总结
- QListView 的高性能加载方案
- flac转mp3方法,flac转mp3步骤
- 数组unshift方法及重构
- 美团餐饮SaaS基于StarRocks构建商家数据中台的探索
- Kafka消息偏移量的演变
- 渗透测试工具篇——sqlmap
- #Paper reading#DeepInf: Social Influence Prediction with Deep Learning
- 短视频营销的3个重点:KOL化+话题性+深度互动
- Java Bean 转 Map 的巨坑,注意了!!!
- Mongodb关于读取的问题(Read Concern)和Write Concern
- pythoniter雪峰_[雪峰磁针石博客]python3快速入门教程1 turtle绘图-3循环