Android動態載入技術(外掛程式化技術)

2021-09-07 16:37:56 字數 2663 閱讀 3809

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中的資源

protected

void

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物件

public

final

intaddassetpath(string path)

}

接著在**activity中實現getassets和getresources

@override

public

assetmanager getassets()

@override

public

resources getresources()

no6:

activity生命週期的管理

反射方式

@override

protected

void

onresume())

}catch

(exception e)

}}@override

protected

void

onpause())

}catch

(exception e)

}super

.onpause();

}

介面方式

public

inte***ce

dlplugin

**actvitiy中呼叫

...

@override

protected

void

onstart()

@override

protected

void

onrestart()

@override

protected

void

onresume()

mremoteactivity就是dlplugin的實現

no7:

外掛程式classloader的管理

public

class 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...