问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Android代理模式基础讲解

发布网友 发布时间:2022-11-17 02:53

我来回答

1个回答

热心网友 时间:2024-11-23 12:08


代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。



静态代理的代理类持有被代理者的引用,在方法调用时,代理对象调用了被代理对象去执行真正的实现。


2.1 简单示例
假如对于一个日志处理功能,可通过代理类代理实例日志处理类:



这样,在使用过程中,可以按如下方式使用:



2.2 AIDL
AIDL中也用到了代理模式,在Android Studio中新建一个AIDL文件,如下所示:



在点击make project后,会自动生成AIDL接口对应的代码,即对应的Stub和Proxy,可以看到AIDL的Proxy是通过静态代理实现,自动生成的代码如下所示:




在2.1的静态代理代码中,如果现在需要扩展一个新的接口,那就需要分别在接口层、实际处理类、代理类中分别改动,如下所示:



当代理一个新的接口时可见,新的代理类与其他代理类代码是高度相似的,因此可以采用动态代理的方式来完成类似的功能。


3.1 基础用法
与静态代理不同,动态代理类的class是在运行过程中动态生成的。


3.1.1 基础用法
首先定义接口层:



然后使用Proxy.newProxyInstance完成动态代理如下:



其中,InvocationHandler就是将静态代理中需要实现的部分抽离了出来,即动态生成的Proxy代理了InvocationHandler。


3.1.2 动态生成的class
动态生成的代理类的方法实际调用都到了InvocationHandler的invoke方法,动态生成的代理类class伪代码如下:



3.1.3 源码分析
下面分析Proxy.newProxyInstance的源码:



3.2 Retrofit动态代理
Retrofit是一个开源网络库,其源码中也使用到了动态代理模式。简单介绍如下:


3.2.1 基础用法
首先,新建网络请求对应的接口:



然后,使用Retrofit动态代理生成请求:



3.2.2 Retrofit动态代理实现
接下来分析Retrofit内部是如何使用动态代理模式的:


声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人大政协辅助岗是什么 政务辅助人员是干什么 政府辅助人员是什么 努比亚的海拔什么意思 北非努比亚现在怎么样了啊 相邻权的相关法律 梦见老公离世了什么预兆 梦见自己老公走掉 你出轨后 怎么操作才没被发现? 评评怎么造句 Python设计模式 - 代理模式 计算机数据输出采用什么方式? 计算机输出的能量形式 300美分/公斤换成美元/吨是多少 海尔云电视都有哪些性能,质量好吗? 大学生应该怎样使用信用卡理财 大学生怎样使用信用卡? 关于wps的格式问题,怎么去掉页眉下面的那个虚回车符号 在线等,急... 中建八局招聘先测评吗再签约 中建一测中选择非常不符合过多会怎么样 中建一测没过,有机会签中建三局分公司的劳务派遣吗 怎样将爱奇艺下载视频到桌面 床垫厂用黑心棉材料算违法吗 如何收集群精华?(详细操作步骤) 黑心棉床垫睡了一个月有危害吗 黑心棉床垫对人体有害吗 费县师范学校有哪些专业 上一节课挣一百块钱怎么发朋友圈说说 适合生意人发的朋友圈 富豪的朋友圈怎样发美食 代理模式的简介 瓷盆养金鱼能出青苔吗 she和her的用法与区别? 企业微信里的健康安全助手怎么下载 ...银行声誉风险的因素?对于声誉风险的管理,应该包括哪些方面 有没有男主爱而不得的小说 爱情得到却不能在一起叫什么? 爱而不得,不曾相忘(短篇小说完整版) 电脑双根8g有什么区别? 中国人改国籍了还能改回来吗 中国人改了国籍还能改回来吗 怎么才能让一个人不喝酒 朋友老梦到我我去河边旅游什么意思 《重庆森林》影评 说一说,钱程策略如何?可信吗 抖音客服能帮忙找到自己在直播间的连麦记录嘛 手机上显示无效得IMEI 是怎么回事 二十六个字母画法 学生午睡多久最好 补办身份证需要带什么证件去