建议先阅读 插件进程初始化
接上一篇 PluginLoader
插件管理进程拿到PluginLoader之后,就可以对插件进程操作了。
startActivityInPluginProcess(intent)
内部实现很简单,就是要启动宿主里注册的Activity。 ps:这里可以增加intent是否能够找到Activity判断
fun startActivityInPluginProcess(intent: Intent) {
mUiHandler.post {
mContext.startActivity(intent)
}
}
intent转换方法 convertActivityIntent(pluginActivityIntent)
Activity的代理转发
PluginContainerActivity 是注册在宿主中的父类,其持有一个HostActivityDelegate实现,在PluginContainerActivity初始化时会调用其setDelegator方法,把自己作为HostActivityDelegator设置进去
ShadowActivityDelegate是HostActivityDelegate的实现类。其持有一个ShadowActivity实例
ShadowActivity会持有宿主的HostActivityDelegator
关系撸清楚之后,简单说个场景,如图中宿主PluginContainerActivity onCreate方法调用是,会调用给ShadowActivityDelegate的onCreate。ShadowActivityDelegate会new出业务的ShadowActivity实现类并调用其onCreate方法,ShadowActivity的onCreate方法直接反调用了HostActivityDelegator的superOnCreate方法(实际就是PluginContainerActivity的super.onCreate)
很不错的代理转发,会发现,插件Activity中的super逻辑完全保持了应该有的逻辑(调用宿主Activity的super的顺序问题)