【状态模式】

No1:

Wifi设置界面是一个叫做WifiSetting的Fragment实现的

No2:

在不同的状态下对于扫描Wifi这个请求的处理是完全不一样的。在初始状态下扫描请求被直接忽略,在驱动加载中状态下Wifi扫描请求被添加到延迟处理的消息列表,在驱动加载完成状态下扫描Wifi的请求直接被处理。

它的实现原理就是将请求的处理封装到状态类中,在不同的状态类中对同一个请求进行不同的处理

【责任链模式】

No3:

最大缺点:对链中请求处理者的遍历,如果处理者太多,那么遍历必定会影响性能,特别是在一些递归调用中,要慎重

【解释器模式】

No4:

ServiceManager是Binder进程间通信机制的守护进程,其目的很简单,就是管理Android系统里的Binder对象。

No5:

优点:灵活的扩展性,当我们想对文法规则进行扩展延伸时,只需要增加相应的非终结符解释器,并在构建抽象语法树时,使用到新增的解释器对象进行具体的解释即可,非常方便。

缺点:因为对于每一条文法都可以对应至少一个解释器,其会生成大量的类,导致后期维护困难,所以对于复杂的文法并不推荐使用解释器模式。

【命令模式】

No6:

命令模式包括:命令抽象接口、具体命令类、请求者、接收者

【观察者模式】

No7:

registerReceiver函数并不是在Activity中实现,而是在其父类ContextWrapper中-ContextImpl

No8:

Android应用程序发送广播的过程

1)通过sendBroadcast把一个广播通过Binder发送给ActivityManagerService,ActivityManagerService根据这个广播的Action类型找到相应的广播接收器,然后把这个广播放进自己的消息队列中,就完成第一阶段对这个广播的异步分发

2)ActivityManagerService在消息循环中处理这个广播,并通过Binder机制把这个广播分发给注册的ReceiverDispatcher,ReceiverDispatcher把这个广播放进MainActivity所在线程的消息队列中,就完成第二阶段对这个广播的异步分发

3)ReceiverDispatcher的内部类Args在MainActivity所在的线程消息循环中处理这个广播,最终是将这个广播分发给所注册的BroadcastReceiver实例的onReceive函数进行处理

简单来说,广播就是一个订阅--发布的过程,通过一些map存储BroadcastReceiver,key就是封装了这些广播的信息类,如Action之类的。当发布一个广播时通过AMS到这个map中查询注册了这个广播的IntentFilter的BroadcastReceiver,然后通过ReceiverDispatcher将广播分发给各个订阅对象,从而完成这个发布--订阅过程。

No9:

事件总线EventBus

No10:

观察者模式的缺点:在应用观察者模式时需要考虑一下开发效率和运行效率问题,程序中包括一个被观察者、多个观察者、开发和调试等内容会比较复杂,而且在Java中消息的通知默认是顺序执行,一个观察者卡顿,会影响整体的执行效率,在这种情况下,一般考虑采用异步的方式

【备忘录模式】

onSaveInstanceState函数,主要分为如下3步:

1)存储窗口的视图树的状态

2)存储Fragment的状态

3)调用Activity的ActivityLifecycleCallbacks的onSaveInstanceState函数进行状态存储

No11:

dispatchSaveInstanceState函数在View没有设置id时,这个View的状态不会被存储到Bundle中。

Activity的信息保存在ActivityClientRecord对象中

No12:

优点:

1)给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态

2)实现了信息的封装,使得用户不需要关心状态的保存细节

缺点:

消耗资源,如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存

【迭代器模式】

迭代器模式包括:迭代接口、具体迭代实现类、容器接口、具体容器实现类

No13:

当我们使用SQLiteDatabase的quary方法查询数据库时,会返回一个Cursor游标对象,该游标对象实质就是一个具体的迭代器,我们可以使用它来遍历数据库查询所得的结果集。

《Android源码设计模式》--状态模式--责任链模式--解释器模式--命令模式--观察者模式--备忘录模式--迭代器模式的更多相关文章

  1. 《Android源码设计模式》学习笔记之ImageLoader

    微信公众号:CodingAndroid cnblog:http://www.cnblogs.com/angel88/ CSDN:http://blog.csdn.net/xinpengfei521 需 ...

  2. 《Android源码设计模式》--抽象工厂模式

    No1: 4种MediaPlayer Factory分别会生成不同的MediaPlayer基类:StagefrightPlayer.NuPlayerDriver.MidiFile和TestPlayer ...

  3. 《Android源码设计模式》--Builder模式

    No1: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 No2: 在Android源码中,最常用到的Builder模式就是AlertDialog.Builder No3: ...

  4. tomcat源码解读(2)–容器责任链模式的实现

    责任链模式:责任链模式可以用在这样的场景,当一个request过来的时候,需要对这个request做一系列的加工,使用责任链模式可以使每个加工组件化,减少耦合.也可以使用在当一个request过来的时 ...

  5. 《Android源码设计模式》--模板方法模式

    No1: 模板方法模式包括:抽象类(其中定义了一系列顺序方法).具体实现类A.具体实现类B 如果子类有实现不一样的细节,重写父类的某个方法即可 No2: AsyncTask对象调用execute方法后 ...

  6. 《Android源码设计模式》--享元模式

    No1: 享元模式是对象池的一种实现.享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象共享.避免创建过多对象的效果,这样一来就可以提升性能.避免内存 ...

  7. 《Android源码设计模式》--策略模式

    No1: 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. No2: 使用场景: 1)针对同一类型问题的多种处理方式,仅 ...

  8. 《Android源码设计模式》--工厂方法模式

    No1: 对于一个应用程序来说,其真正的入口是在ActivityThread类中,ActivityThread中含有我们熟悉的main方法.ActivityThread是一个final类,不能被继承. ...

  9. 《Android源码设计模式》--原型模式

    No1: 原型模式使用场景: 1)类初始化需要消耗非常多的资源,这个资源包括数据.硬件资源等,通过原型复制避免这些消耗 2)通过new产生一个对象需要非常繁琐的数据准备货访问权限,这是可以使用原型模式 ...

随机推荐

  1. Git之修复Bug流程

    场景描述 当一个项目已经上线,同时又在原有基础上新增功能模块,于是乎就要在原有代码的基础上进行开发,在新增模块功能的开发的过程中,项目发现了一个紧急Bug,需要修复.应对这种情况,有以下两种解决方案: ...

  2. [bzoj1095][ZJOI2007]Hide 捉迷藏——线段树+括号序列

    题目大意 给定一棵所有点初始值为黑的无权树,你需要支援两种操作: 把一个点的颜色反转 统计最远黑色点对. 题解 本题是一个树上的结构.对于树上的结构,我们可以采用点分治.树链剖分等方法处理,这个题用了 ...

  3. caffe设计网络教程(一)

    假设现在我们要设计一个基于VGG的网络,主要考虑的问题是可否修改VGG类似于resnet那样,应该怎么修改?更具体来说,我们需要在VGG网络上考虑eltwise层,现在我们有三种方案,如下: 方案一: ...

  4. pentaho bi server 配置MySQL数据库

    软件版本: jdk 1.7 MySQL 5.5 biserver-ce-6.1.0.1-196 (选择右下方的所有选项See All Activities) 一.前置环境安装 1.安装jdk(略) 2 ...

  5. celery简介

    目录 Celery简介 Celery架构 中间件选择 Celery序列化 简单项目 Celery简介 celery userguide 知乎大神解释celery Celery(芹菜)是基于Python ...

  6. 使用idea的的第一个坑-----javax.xml.ws.WebServiceRef

    新建项目启动报错的时候,一直报这个错,类找不到,郁闷了半天,都没百度到结果,后来发现是添加tomcat的时候jre没 指定..... 哈哈哈,太懵逼了,指定就ok了

  7. 一步一步搭建11gR2 rac+dg之配置单实例的DG(八)【转】

    RAC主库配置单实例ActiveDataguard 本文文档结构: 这里配置的过程中需要注意的一项是多看看rac1和rac2以及dg的告警日志会对配置过程有更深刻的理解...配置oracle rac的 ...

  8. Sublime Text 3 注册码失效(被移除)解决方法

    最近Sublime Text 3 增加了注册码验证功能,如果你使用共享版本的注册码,可能会提示注册码失效,但是却可以正常激活. 只需要把下面的字段加入到你的hosts文件即可: 127.0.0.1 l ...

  9. Python解决八皇后问题的代码【解读】

    八皇后问题 来自于西方象棋(现在叫 国际象棋,英文chess),详情可见百度百科. 在西方象棋中,有一种叫做皇后的棋子,在棋盘上,如果双方的皇后在同一行.同一列或同一斜线上,就会互相攻击. 八皇后问题 ...

  10. scala中“_”的用法

    参见链接 http://blog.csdn.net/i6448038/article/details/50017427