前言:插件化在Android開發(fā)中的優(yōu)點(diǎn)不言而喻,也有很多文章介紹插件化的優(yōu)勢(shì),所以在此不再贅述。前一陣子在項(xiàng)目中用到 DroidPlugin 插件框架 ,近期準(zhǔn)備投入生產(chǎn)環(huán)境時(shí)出現(xiàn)了一些小問題,所以決心花些時(shí)間研究了一下 DroidPlugin 插件框架的原理,以便再出現(xiàn)問題時(shí)也能從容應(yīng)對(duì)。打開源碼后發(fā)現(xiàn)盡是大把大把的 hook、binder、classloader 等等,很難摸清頭緒,幸運(yùn)的是,有很多熱心的大神已經(jīng)對(duì) DroidPlugin 的原理進(jìn)行了透徹的剖析,文末會(huì)有本人對(duì)參考文章的致謝。
本系列文章的代碼已經(jīng)上傳至github,下載地址:https://github.com/lgliuwei/DroidPluginStudy 本篇文章對(duì)應(yīng)的代碼在 com.liuwei.proxy_hook.proxy 包內(nèi)。
· 代理模式
在 DroidPlugin 中用到了大量的動(dòng)態(tài)代理,所以如果我們想理解 DroidPlugin 的原理,首先我們需要知道什么是動(dòng)態(tài)代理,說到動(dòng)態(tài)代理,我們難免會(huì)想起靜態(tài)代理,那么代理是什么呢?
代理模式的意圖是通過提供一個(gè)代理( Proxy )或者占位符來控制對(duì)該對(duì)象的訪問。類比我們生活中,代理也是隨處可見,其中中介就是一個(gè)很好的例子,把代理看做生活中的中介,將更加易于理解,試想一下,如果我們想租房或者買房的話通過中間是不是就可以讓我們非常省心。
一、靜態(tài)代理
為了保證與所代理的對(duì)象功能行為的一致性,代理類一般需要實(shí)現(xiàn)實(shí)體類所實(shí)現(xiàn)的同一個(gè)接口,以下即為一個(gè)最基本的代理模式的結(jié)構(gòu)。
首先先定義一個(gè)接口,供實(shí)體類和代理類實(shí)現(xiàn)。(如:接口 Sbuject1 )
1 /**2 * Created by liuwei on 17/3/1.3 */4 public interface Subject1 {5 void method1();6 void method2();7 }
網(wǎng)友評(píng)論