前言:插件化在Android開發(fā)中的優(yōu)點不言而喻,也有很多文章介紹插件化的優(yōu)勢,所以在此不再贅述。前一陣子在項目中用到 DroidPlugin 插件框架 ,近期準(zhǔn)備投入生產(chǎn)環(huán)境時出現(xiàn)了一些小問題,所以決心花些時間研究了一下 DroidPlugin 插件框架的原理,以便再出現(xiàn)問題時也能從容應(yīng)對。打開源碼后發(fā)現(xiàn)盡是大把大把的 hook、binder、classloader 等等,很難摸清頭緒,幸運的是,有很多熱心的大神已經(jīng)對 DroidPlugin 的原理進行了透徹的剖析,文末會有本人對參考文章的致謝。

  本系列文章的代碼已經(jīng)上傳至github,下載地址:https://github.com/lgliuwei/DroidPluginStudy 本篇文章對應(yīng)的代碼在 com.liuwei.proxy_hook.proxy 包內(nèi)。

· 代理模式

  在 DroidPlugin 中用到了大量的動態(tài)代理,所以如果我們想理解 DroidPlugin 的原理,首先我們需要知道什么是動態(tài)代理,說到動態(tài)代理,我們難免會想起靜態(tài)代理,那么代理是什么呢?

  代理模式的意圖是通過提供一個代理( Proxy )或者占位符來控制對該對象的訪問。類比我們生活中,代理也是隨處可見,其中中介就是一個很好的例子,把代理看做生活中的中介,將更加易于理解,試想一下,如果我們想租房或者買房的話通過中間是不是就可以讓我們非常省心。

一、靜態(tài)代理

  為了保證與所代理的對象功能行為的一致性,代理類一般需要實現(xiàn)實體類所實現(xiàn)的同一個接口,以下即為一個最基本的代理模式的結(jié)構(gòu)。

  首先先定義一個接口,供實體類和代理類實現(xiàn)。(如:接口 Sbuject1 )

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

1 /**2  * Created by liuwei on 17/3/1.3  */4 public interface Subject1 {5     void method1();6     void method2();7 }

網(wǎng)友評論