插件化框架Shadow分析之Activity启动与代理

1,016 阅读1分钟

建议先阅读 插件进程初始化

接上一篇 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的顺序问题)