DynamicLoadApk 源碼簡單解析

一:模塊

DynamicLoadApk 主要分為四大模塊:
(1) DLPluginManager : 插件管理模塊,負責插件的加載、管理以及啟動插件組件。
(2) Proxy:代理組件模塊,目前包括 DLProxyActivity(代理Activity)、DLProxyFragmentActivity(代理 FragmentActivity)、DLProxyService(代理 Service)
(3) Proxy Impl:代理組件公用邏輯模塊,與(2)中的 Proxy 不同的是,這部分并不是一個組件,而是負責構建、加載插件組件 的管理器。這些 Proxy Impl 通過反射得到插件組件,然后將插件與 Proxy 組件建立關聯(lián),最后調(diào)用插件組件的 onCreate 函數(shù)進行啟動。
(4) Base Plugin:插件組件的基類模塊,目前包括 DLBasePluginActivity(插件 Activity 的基類)、DLBasePluginFragmentActivity(插件 FragmentActivity 的基類)、DLBasePluginService(插件 Service 的基類)。

DynamicLoadApk

二:原理

DynamicLoadApk 原理: 核心思想可以總結為兩個字:代理。通過在 Manifest 中注冊代理組件,當啟動插件組件時首先啟動一個代理組件,然后通過這個代理組件來構建、啟動插件組件。
總體原理圖

加載插件并啟動代理組件

(1) 首先通過 DLPluginManager 的 loadApk 函數(shù)加載插件,這步每個插件只需調(diào)用一次。
流程解析:
loadApk流程

(2) 通過 DLPluginManager 的 startPluginActivity 函數(shù)啟動代理 Activity。

startPluginActivity啟動代理組件流程

(3) 代理 Activity 啟動過程中構建、啟動插件 Activity。

構建,啟動插件組件流程
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容