no1:
外掛程式化技術的好處:
1)減輕應用的記憶體和cpu占用
2)實現熱插拔,即在不發布新版本的情況下更新某些模組
no2:
外掛程式化方案必須要解決三個基礎性問題:資源訪問、activity生命週期的管理和classloader的管理
no3:
宿主是指普通的apk,外掛程式一般指經過處理的dex或者apk。外掛程式化框架大多採用apk作為外掛程式,很多需要用到**activity,外掛程式activity的啟動大多數是借助乙個**activity來實現的。
no4:
activity的工作主要是通過contextimpl來完成的,activity中有乙個交mbase的成員變數,它的型別就是contextimpl。context中有兩個抽象方法getassets和getresources,通過它們來獲取資源的,真正實現在contextimpl中。
no5:
資源訪問
載入apk中的資源
protectedvoid
loadresources()
catch
(exception e)
resources superres = super
.getresources();
mresources = new
resources(massetmanager,superres.getdisplaymetrics(),superres.getconfiguration());
mtheme =mresources.newtheme();
mtheme.setto(
super
.gettheme());
}
通過反射,呼叫assetmanager中addassetpath方法,將乙個apk中的資源載入到resources物件中。然後通過assetmanager來建立乙個新的resources物件
publicfinal
intaddassetpath(string path)
}
接著在**activity中實現getassets和getresources
@overridepublic
assetmanager getassets()
@override
public
resources getresources()
no6:
activity生命週期的管理
反射方式
@overrideprotected
void
onresume())
}catch
(exception e)
}}@override
protected
void
onpause())
}catch
(exception e)
}super
.onpause();
}
介面方式
publicinte***ce
dlplugin
**actvitiy中呼叫
...@override
protected
void
onstart()
@override
protected
void
onrestart()
@override
protected
void
onresume()
mremoteactivity就是dlplugin的實現
no7:
外掛程式classloader的管理
publicclass dlclassloader extends
dexclassloader
public
static
dlclassloader getclassloader(string dexpath,context context,classloader parentloader)
file dexoutputdir = context.getdir("dex",context.mode_private);
final string dexoutputpath =dexoutputdir.getabsolutepath();
dlclassloader = new dlclassloader(dexpath,dexoutputpath,null
,parentloader);
mpluginclassloaders.put(dexpath,dlclassloader);
return
dlclassloader;
}}
通過將不同外掛程式的classloader儲存在乙個hashmap中,這樣就可以保證不同外掛程式中的類彼此互不干擾。
android 動態載入技術
首先,應該保證host程式 inte ce部分和impl實現部分在同乙個專案中,其中inte ce部分和impl實現部分作為android library。寫好 之後,將impl部分打包jar的build指令如下 task clearjar type delete task makejar type...
Android動態載入技術 系列索引
大家新年好,最近花了點時間,慢慢把這個系列的內容稍微調整了下。last edit 2016 2 10 現在使用得比較廣泛的動態載入技術的核心一般都是使用classloader,後者能夠引導程式外部的類 已編譯好的 從而達到公升級 邏輯的目的。雖然動態載入的核心原理比較簡單,但是根據功能的複雜程度,實...
Android外掛程式化 動態載入jar 一
4.結束 dexclassloader 和 pathclassloader 的都是繼承與 basedexclassloader,是通過類載入 classloader 來載入查詢 class。pathclassloader只能載入已經安裝到android系統中的apk檔案,dexclassloader...