Android插件研究系列之DL简析

Android插件研究系列之DL
一.概述
插件化,简单来说就是在不更新apk的情况下,只从服务器下载插件(一般是打包或处理过的apk),然后增加宿主apk的功能或更新宿主apk的一些功能,资源。
DL插件框架的作用是增加宿主apk的功能,如增加新的Activity,service。其核心思想就是代理。该方法不需要安装插件apk。


二.宿主apk
宿主apk要解决的问题主要有三个,即Activity生命周期管理,资源(R)调用和对插件Activity类的加载和对象的创建。
1.宿主apk的初始化如下图,首先是获取规定位置所以apk文件,并解析其基本信息,如包名,Activity,service等。
 


接着获取插件apk的ClassLoader(其中dexPath为插件apk的路径),用于加载插件Activity等类并得到对象
 


获取插件apk的asset管理,创建一个AssetManager,并且通过反射把其于插件apk的资源关联起来
 


通过前面的AssetManager获取插件apk的Resource
 


2.宿主apk启动插件Activity过程,即通过前面的ClassLoader创建插件Activity对象,同时启动宿主apk原先注册好的代理Activity,然后用代理Activity来代理插件Activity的生命流程
 

 

其生命周期如下,其中mRemoteActivity就是插件Activity对象


三.插件apk
1.所有插件Activity都要继承插件的基类
 
而插件基类Activity内部重写了Activity的一些基本方法,主要就是判断该Activity是当做普通apk使用的还是当做插件使用的。如果是当做插件使用,则其在attach()的时候会得到代理Activity的一个引用,然后很多插件Activity的内部方法就都间接使用代理Activity的方法。如设置布局文件的setContentView()
 
查找view的id
 
获取资源
 
等等等等。。。。。。。。。




四.总结
在宿主代理Activity拥有插件Activity的对象引用,在插件Activity里也拥有宿主Activity的对象引用。其作用是,代理Activity在其生命周期函数里调用插件Activity的对应生命周期函数,从而产生插件Activity拥有正常Activity的生命属性。而插件Activity的非生命周期的重要函数入setContentView()则调用了代理Activity的对应函数,从而实现资源的通用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值