


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android 学习ActivityManager 与 Proxy 模式的运用一 Proxy 模式意图: 为其他对象提供一种代理以控制这个对象的访问。适用性:l 远程代理( Remote Proxy ): 为一个对象在不同的地址空间提供局部代表。l虚代理(Virtual Proxy)根据需要创建开销很大的对象。使用一个代理对象作为代表,在真正的需要时进行创建。I保护代理(Protection Proxy):控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候。l智能指引(Smart Reference):取代了简单的指针,它在访问对象时执行一些附加操作。对指向实际对象的引用计 数,
2、这样当该对象没有引用时,可以自动释放它,智能指针当第一次引用一个持久对象时,将它装入内存。在访问一个实际对象前,检查是否已经锁定了它,以确保其他对象不能改变它结构:运行时刻一种可能的代理结构的对象图:理解:1 ) Remote Proxy可以隐藏一个对象存在于不同地址空间的事实。但是提供一 个代理对象,使用起来就像在使用真正的对象一样。Virtual Proxy可以进行最优化,例如根据要求创建对象。copy - on- write。根据实际的需求对所代理的对象进行合理管理(创建加载销毁)Protection Proxies和Smart Reference都允许在访问一个对象时有一些附加的内务处
3、理;对不同的访问设置权限,对对象进行保护。二 Android 中 ActivityManager从官方文档的介绍可以看到ActivityManager的作用:是与系统所有正在运行着的Acitivity进行交互,对系统所有运行中的Activity相关信息(Task,Memory,Service,App) 进行管理和维护;提供了相应的接口用于获取这些信息。但是这些信息真正维护并不是ActivityManager来负责的,从其中的众多接口 getXXX ()可以看到其中都是使用: public List getRunningAppProcesses() return ActivityManagerN
4、ative.getDefault().getRunningAppProcesses();都是通过这个ActivityManagerNative.getDefault()的操作来实现这些信息的获取。 虽然再继续进入函数查找,仍然不能知道到底是哪一个类的对象在实施具体的操作。所以要看清楚ActivityManager真正是和谁交互,就需要去探究实施Activity Manager框架相关类作、继承关系和层次结构以及控制关系。三Android中Activity Manager相关类继承层次关系看一下类结构图如下:AAAces ()inT-crfaccIBindcrtransact ()IInterf
5、aceasBindcrOAct i vi tyManagprSi.I getDefault (). get Services ()TAct.ivi AAAces ()inT-crfaccIBindcrtransact ()IInterfaceasBindcrOAct i vi tyManagprSi.I getDefault (). get Services ()TAct.ivi t yManagerBinder+trmsact 0Acti vi tyManagerNa tive -gDcfituli : IAclivilyMatittgcr +uriTriinaa.ct () tgetDef
6、ault 0 : lActivityManagerAct! v ityMan tiger ServiceActivit yMEinagerProxv mReniote : Binderi getStrv lues ()Act iv ityManager-eiRurin i nSpryi ()lActivityManager 作为 ActivityManagerProxy 和 ActivityManagerNative 的公共接口, 所以两个类具有部分相同的接口,可以实现合理的代理模式;ActivityManagerProxy 代理类是 ActivityManagerNative 的内部类;Ac
7、tivityManagerNative是个抽象类,真正发挥作用的是它的子类ActivityManagerService (系统Service组件)。 这里设计到两个过程:代理对象建立:ActivityManagerProxy代理对象的创建; 程序执行过程:如何通过代理对象来执行真正对象请求;从图中可以看出代理类: 使用 ActivityManagerProxy 代理类, 来代理 ActivityManagerNative 类的子类 ActivityManagerService; ActivityManagerService是系统统一的Service,运行在独立的进程中;通过系统ServiceM
8、anger获取;ActivityManager 运行在一个进程里面, ActivityManagerService 运行在另一个进程内, 对象在不同的进程里面,其地址是相互独立的;实现跨进程的对象访问,需要对应进程间通信的规则, 此处是采用Binder机制实现跨进程通信;所以此处的Proxy模式的运用属于:远程代理(RemoteProxy)。下面看看这两个过程。四 代理实现过程 1 代理对象建立 是在 ActivityManager 的 getRunningServices 执行时就需要代理类来执行;public List getRunningServices(int maxNum)retur
9、n ActivityManagerNative.getDefault() getServices(maxNum, 0);继续看看 ActivityManagerNative.getDefault()到底干了什么事:实际上是关乎到Singleton型的gDefault对象创建;private static final Singleton gDefault = newSingleton() protected IActivityManager create() IBinder b = ServiceManager.getService(activity);IActivityManager am =
10、 asInterface(b);return am;ServiceManager.getService(activity);获取系统的“activity”的 Service, 所有的Service都是注册到ServiceManager进行统一管理。这样就创建了一个对ActivityManagerService实例的本地代理对象ActivityManagerProxy实例。Singleton是通用的单例 模板类。ActivityManagerNative.getDefault就返回一个此代理对象的公共接口 IActivityManager类型,就可以在本地调用远程对象的 操作方法。2 执行过程这
11、个执行过程就设计到ActivityManager框架的执行流程;简单看一下这个getServices的执行过程。Localgel Rimn i ngServ i eesAcli v i(yManagerProxynnTransactLocalgel Rimn i ngServ i eesAcli v i(yManagerProxynnTransactoriT ransae i gebScrvices此图表明整个 Client 对 Service 的访问是通过 Service 的代理对象 Proxy 进行访问的。Android 中对 Service 访问的模式都是以 Client/Server 模式进行;Client 实际
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业培训中教育机器人的作用与应用趋势研究
- 卤肉加工企业培训课件
- 教育与科技的协同发展助力学生成长
- 在线直播教学中学生参与度的提升方法研究
- 中小学教辅材料征订管理制度
- 以创新驱动未来-智能型学习工具如教育机器人的发展策略研究
- 技术助力办公效率探讨使用在线教育平台的实践和成效
- 全球铀矿资源分布与核能产业产业链整合与风险研究报告
- 公交优先战略2025年城市交通拥堵治理的公共交通信息化建设报告
- Chitosan-Cy7-MW-10000-生命科学试剂-MCE
- 广东省佛山市2024-2025学年高一下学期6月期末考试 数学 含解析
- 2025年全国高校辅导员素质能力大赛基础知识测试题及答案(共3套)
- 律师事务所客户信息保密规定
- 云南楚雄州金江能源集团有限公司招聘笔试真题2024
- 2025-2030中国动力电池回收利用技术路线与经济性评估分析研究报告
- 7下期末家长会课件
- 酒店前厅服务流程标准化管理
- 互联网行业产品经理专业顾问聘用协议
- 2025年 东北石油大学招聘考试笔试试题附答案
- 2025年呼伦贝尔农垦集团有限公司工作人员招聘考试试题
- DBJ03-107-2019 房屋建筑和市政工程施工危险性较大的分部分项工程安全管理规范
评论
0/150
提交评论