Replugin插件化技术解读之插件四大组件调用原理-Activity(一)

本文深入探讨Replugin插件化技术,解释如何开启和调用插件Activity。首先从Replugin.StartActivity入口点开始, 描述了PluginActivity如何通过反射调用宿主的Factory2.startActivity方法,进而联系到RepluginFramework的初始化过程。接着讨论了通过替换Context以确保所有startActivity调用都遵循预设流程,并着重介绍了PluginContext在其中的作用。
摘要由CSDN通过智能技术生成

在《Replugin插件化技术解读之框架初始化、插件安装与加载(一)》和《Replugin插件化技术解读之框架初始化、插件安装与加载(二)》中讲解了Replugin插件框架的初始化以及外置、内置插件的安装加载,那么到这里整个插件框架的所有准备初始化工作都执行完毕啦,我们从现在起就可以愉快的调用插件中的四大组件来玩耍啦。

一、开启插件Activity流程

第1步:开启插件Activity的入口在Replugin.StartActivity(Context context, Intent intent),其他intent内部一定要传入想要开启的插件名。

public static boolean startActivity(Context context, Intent intent) {
        // TODO 先用旧的开启Activity方案,以后再优化
        ComponentName cn = intent.getComponent();
        if (cn == null) {
            // TODO 需要支持Action方案
            return false;
        }
        String plugin = cn.getPackageName();
        String cls = cn.getClassName();
        return Factory.startActivityWithNoInjectCN(context, intent, plugin, cls, IPluginManager.PROCESS_AUTO);
    }
Factory.startActivityWithNoInjectCN内部调用sPluginManager.startActivity方法,那么sPluginManager是哪里传进去的?

PMF.java

Factory.sPluginManager = PMF.getLocal();
Factory2.sPluginManager = PMF.getInternal();
看下PMF.init的方法可以看到sPluginManager是PMF内部维护的sPluginMgr.mLocal,也就是Pmbase内部的PmLocalmpl mLocal对象,继续跟踪发现真正实现startActivity逻辑的是PmBase内部的PmInternalmpl.startActivity下面这个方法。
public boolean startActivity(Context context, Intent intent, String plugin, String activity, int process, boolean download) {
        。。。
    }
第2步:重点走读下上面startActivity方法,首先会判断要跳转的插件是否已经存在了,如果不存在则回调callback接口去提示用户下载等逻辑操作, 如果插件状态不正确,则回调外部callback去提示用户插件不可用或者去升级,如果插件首次加载并且是大插件则异步加载并弹窗显示正在加载。然后在调用context.startActivity方法前会去通过下面的loadPluginActivity方法将目标插件Activity class替换为“坑位”Activity,这样其实传给AMS的还是宿主的坑位Activity。
PmI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值