1.插件化开发原理? 新的解决方案: 第一点:不需要安装APK文件,直接可以使用其中的资源 第二点:插件APK资源是在主程序运行中获取的(类库强大) --- 运行时可以干这些事情
2.插件化架构设计? 假设:登录设计(LoginActivity) 代理模式 - 静态代理(选择性监听我想要的方法)
看框架:看包结构和类结构
角色划分:
目标接口:自定义目标接口(IPlugin)
目标对象:具体的Activity(开发者定义的Activity,我们需要提供基类:PluginActivity、PluginFragmentActivity、PluginFragment、PluginService、PluginReceiver、PluginContentProvider......)
代理对象:需要自定义(ProxyPluginActivity、ProxyPluginFragmentActivity、ProxyPluginService等等)
演示效果:基于DL(Dynamic Loading)
第一步:加载插件程序
第二步:启动插件程序
第三步:通过代理类实现
PluginProxyActivity
代理对象需要持有目标对象的引用
目的:就是为了获取目标对象Activity中资源,拿到资源之后,再将这些资源显示到代理对象上面
复制代码
3.Activity、FragmentActivity实现 定义插件化架构设计: 第一步:定义目标接口 第二步:定义目标对象 第三步:定义代理对象 第四步:实现目标对象
目标对象 - 插件程序的生命周期方法,都是由代理对象进行管理和控制
复制代码
注意:目标对象的生命周期的方法不要回调代理对象的生命周期方法,如果回调,那么会出现回调死循环
第五步:实现代理对象
代理对象的生命周期管理 — 在清单文件中配置,有系统帮助我们管理
ProxyPluginActivity代理对象的attach方法的执行流程
1、主程序调用pluginManager.startPluginActivity启动Activity
2、系统会自动调用代理对象的onCreate方法
3、在代理对象(ProxyPluginActivity)的onCreate方法中调用impl.onCreate(getIntent());
进行初始化目标对象(也就是管理具体的插件程序)
4、在ProxyImpl类中启动插件launchTargetActivity
5、在launchTargetActivity方法中调用attach方法,绑定代理对象的目标对象
复制代码
因为我们代理Activity(ProxyPluginActivity)修饰符不要写成了抽象类,否则 宿主主程序引用出错
adb push D:\AndroidProject\Architect_PluginB_Simple\app\build\outputs\apk\app-debug.apk /storage/emulated/0/DynamicLoadHost //5.0记得开启读写权限