一、插件化定义
类似与支付宝,主界面可以看到有海量的应用,但是支付宝本身只有40M左右,插件化的好处:1.宿主和插件分开编译,并发开发;2.动态更新插件,不需要进行安装;3.按需下载模块,解决爆棚问题。
插件化的三点:1.class文件加载;2.res文件加载;3.处理插件的生命周期
二、支付宝插件的标准
支付宝接入淘票票
淘票票的Activity需要上下文context,如何解决插件的生命周期?
三、步骤:
3.1新建一个lib,用来定义插件标准接口(pluginstand)
image.png凡是跟context相关的Activity生命周期方法,都要在PayInterfaceActivity重写:
image.png
3.2新建一个application模块,用来模拟淘票票应用
3.2.1新建一个父类BaseActivity集成Activity并实现插件的标准Activity接口,凡是引用到Context上下文的方法,都要重写,并用attach方法传进来的proxyActivity替代super关键字
image.png3.2.2插件中的Activity都要集成BaseActivity
测试步骤1.先将taopiaopiao生成apk,放至在sdcard目录下,然后再宿主的MainActivity模拟插件apk的下载过程:
image.png
测试步骤2.宿主包新建一个PluginManager单例类,根据插件apk的路径FilePath,去找到要加载的Activity的ClassName,和对应的Activity的Resource
image.png image.png
测试步骤3.新建一个ProxyActivity类,用代理设计模式,用这个伪类去加载插件的Activity
image.png(注意:想要加载插件的Activity,你要获取两个点1.class;2.res资源),另外跳转Activity也是先宿主先跳转到ProxyActivity,再由ProxyActivity纷发下去,比如说宿主MainActivity的已经将插件进行过一次加载了,所以我们就能通过PluginManager去拿到插件中的PackageInfo,那也就能拿到插件当中的所有Activity的className
image.png image.png
完成以上这些步骤,就能实现简单的插件Activity加载了,小伙伴们可以试一下哦
四、那么如果插件内部的activity如何跳转呢?
插件的A_Activity跳转到B_Activity,其实就是ProxyActivity再次跳转到新的ProxyActivity,所以ProxyActivity的启动模式只能是默认的stander模式。
我们上面已经讲过,插件的BaseActivity需要重写所有关于Activity的全部方法,如startActivity:
image.png
注意:上图中的that就是ProxyActivity!!!
然后ProxyActivity也要重写startActivity方法:
image.png
完成上述步骤,也就可以实现插件内部的activity跳转咯,小伙伴们再试下吧!!!
五、怎样启动插件的Service?
5.1第一步也要定义一个Service的标准PayInterfaceService
image.png5.2第二步在插件中新建一个BaseService,集成Service并实现PayInterfaceService
image.png六、总结
同学们,今天就先简单的介绍如何加载插件的activity和service,还有插件activity内部的跳转,附带上我的github地址,欢迎start,谢谢!!!
https://github.com/cWX411904/AliPayPluginTestOne
网友评论