什么是插件化?
对于移动端开发,所谓插件化就是在一个宿主APP内打开另一个未安装的插件APP,插件使用了宿主的上下文,即context。
要实现插件化,需要宿主、插件两应用实现同一套标准。
进行时需要新建一个项目,项目分为三个模块,一个宿主APP(app model),一个插件APP(plugin_package model),一个接口标准(startder library)。
我们要做的是从宿主MainActivity跳转到插件的PluginActivity,再从插件的PluginActivity跳转到插件的PluginMainActivity,这是两个步骤,需要不同的实现方法。
宿主内如何启动插件内页面 ?
app和plugin_package都依赖于startder,startder包含一个接口ActivityInterface,内置一些生命周期方法和可注入context的方法,让插件APP实现这一接口,随后在宿主APP修改classLoader 和 resource,再通过反射创建插件APP实例,将实现标准的接口类转换成ActivityInterface反射调用,达到启动。
插件内页面如何启动插件内页面?
插件内的页面启动应基于宿主的上下文环境,否则一定失败,如何利用宿主环境启动呢?我们可以利用宿主的环境将插件内的startActivity方法调用到宿主类去,就像这样:appActivity.startActivity(newIntent); 随即将要跳转的Activity class通过Intent传递过去,在宿主类拦截,利用自身的任务栈启动。