android 廣播分為靜態廣播和動態廣播
2)動態廣播通過**的方式進行註冊,呼叫context的registerreceiver方法,最終會activitymanagernative.getdefault().registerreceiver, 所以 動態廣播的註冊資訊存在於ams中。
傳送廣播和接受廣播:
1) 傳送廣播,context的sendbroadcast(), 最終會呼叫amn.getdefault().broadcastintent(), 把要傳送的廣播告訴ams
靜態廣播外掛程式化:
**如下:
file dexfile = getfilestreampath("plugin1-debug.apk");動態廣播外掛程式化:file optdexfile = getfilestreampath("plugin1-debug.dex");
pluginclassloadutil.combineplugindex(getclassloader(),dexfile,optdexfile); //合併外掛程式dex
//傳送廣播
intent intent = new intent();
intent.setaction("com.xiongliang.plugin.staticreceiver");
sendbroadcast(intent);
**如下:
file dexfile = getfilestreampath("plugin1-debug.apk");file optdexfile = getfilestreampath("plugin1-debug.dex");
pluginclassloadutil.combineplugindex(getclassloader(),dexfile,optdexfile); //合併外掛程式dex
//註冊廣播
// 1. 例項化broadcastreceiver子類 & intentfilter
dynamicreceiver = (broadcastreceiver) reflectutil.createobject("com.xiongliang.plugin1.maindynamicreceiver",null,null);
intentfilter intentfilter = new intentfilter();
// 2. 設定接收廣播的型別
intentfilter.addaction("com.xiongliang.pluginprohect.dynamicreceiver");
// 3. 動態註冊:呼叫context的registerreceiver()方法
registerreceiver(dynamicreceiver, intentfilter);
//傳送廣播
intent intent = new intent();
intent.setaction("com.xiongliang.pluginprohect.dynamicreceiver");
sendbroadcast(intent);
外掛程式化小結
2 在編譯的時候會將子外掛程式偽裝為so,並且合併manifest。3 子外掛程式可以直接編譯為apk,他只需要負責實現自己的功能即可,盡量避免多個直外掛程式之間互相干擾。4 如果在apk發布後需要動態載入新的頁面也業務。manifest是沒有辦法改變的,如何找到這個activity呢?a 可以使用...
Android元件化和外掛程式化
元件化開發元件化優勢 稍微改動乙個模組的一點 都要編譯整個工程,耗時耗力 公共資源 業務 模組混在一起耦合度太高,不方便測試 如何劃分元件 1.新建乙個lib元件,new module andorid library,取名baseutillib,我們將所有的公共的工具類 網路分裝等類放在其中 2.新...
外掛程式化技術 提取公共庫外掛程式
values colors.xml dimens.xml styles.xml values w820dp dimens.xml 這些資源定義了該應用的主題 介面邊距等樣式,在多個應用外掛程式間,這些資源應該是 可被復用 的。這個時候,我們可以通過提取公共庫外掛程式模組來解決這些問題。高階 為了便於...