一、插件化定義
類似與支付寶,主界面可以看到有海量的應(yīng)用,但是支付寶本身只有40M左右,插件化的好處:1.宿主和插件分開編譯,并發(fā)開發(fā);2.動態(tài)更新插件,不需要進(jìn)行安裝;3.按需下載模塊,解決爆棚問題。
插件化的三點(diǎn):1.class文件加載;2.res文件加載;3.處理插件的生命周期
二、支付寶插件的標(biāo)準(zhǔn)
支付寶接入淘票票
淘票票的Activity需要上下文context,如何解決插件的生命周期?
三、步驟:
3.1新建一個lib,用來定義插件標(biāo)準(zhǔn)接口(pluginstand)

凡是跟context相關(guān)的Activity生命周期方法,都要在PayInterfaceActivity重寫:

3.2新建一個application模塊,用來模擬淘票票應(yīng)用
3.2.1新建一個父類BaseActivity集成Activity并實(shí)現(xiàn)插件的標(biāo)準(zhǔn)Activity接口,凡是引用到Context上下文的方法,都要重寫,并用attach方法傳進(jìn)來的proxyActivity替代super關(guān)鍵字

3.2.2插件中的Activity都要集成BaseActivity
測試步驟1.先將taopiaopiao生成apk,放至在sdcard目錄下,然后再宿主的MainActivity模擬插件apk的下載過程:

測試步驟2.宿主包新建一個PluginManager單例類,根據(jù)插件apk的路徑FilePath,去找到要加載的Activity的ClassName,和對應(yīng)的Activity的Resource


測試步驟3.新建一個ProxyActivity類,用代理設(shè)計(jì)模式,用這個偽類去加載插件的Activity
(注意:想要加載插件的Activity,你要獲取兩個點(diǎn)1.class;2.res資源),另外跳轉(zhuǎn)Activity也是先宿主先跳轉(zhuǎn)到ProxyActivity,再由ProxyActivity紛發(fā)下去,比如說宿主MainActivity的已經(jīng)將插件進(jìn)行過一次加載了,所以我們就能通過PluginManager去拿到插件中的PackageInfo,那也就能拿到插件當(dāng)中的所有Activity的className



完成以上這些步驟,就能實(shí)現(xiàn)簡單的插件Activity加載了,小伙伴們可以試一下哦
四、那么如果插件內(nèi)部的activity如何跳轉(zhuǎn)呢?
插件的A_Activity跳轉(zhuǎn)到B_Activity,其實(shí)就是ProxyActivity再次跳轉(zhuǎn)到新的ProxyActivity,所以ProxyActivity的啟動模式只能是默認(rèn)的stander模式。
我們上面已經(jīng)講過,插件的BaseActivity需要重寫所有關(guān)于Activity的全部方法,如startActivity:

注意:上圖中的that就是ProxyActivity!??!
然后ProxyActivity也要重寫startActivity方法:

完成上述步驟,也就可以實(shí)現(xiàn)插件內(nèi)部的activity跳轉(zhuǎn)咯,小伙伴們再試下吧!??!
五、怎樣啟動插件的Service?
5.1第一步也要定義一個Service的標(biāo)準(zhǔn)PayInterfaceService

5.2第二步在插件中新建一個BaseService,集成Service并實(shí)現(xiàn)PayInterfaceService

六、總結(jié)
同學(xué)們,今天就先簡單的介紹如何加載插件的activity和service,還有插件activity內(nèi)部的跳轉(zhuǎn),附帶上我的github地址,歡迎start,謝謝!??!
https://github.com/cWX411904/AliPayPluginTestOne