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的生命流程
1.所有插件Activity都要继承插件的基类
而插件基类Activity内部重写了Activity的一些基本方法,主要就是判断该Activity是当做普通apk使用的还是当做插件使用的。如果是当做插件使用,则其在attach()的时候会得到代理Activity的一个引用,然后很多插件Activity的内部方法就都间接使用代理Activity的方法。如设置布局文件的setContentView()
查找view的id
获取资源
等等等等。。。。。。。。。
四.总结
在宿主代理Activity拥有插件Activity的对象引用,在插件Activity里也拥有宿主Activity的对象引用。其作用是,代理Activity在其生命周期函数里调用插件Activity的对应生命周期函数,从而产生插件Activity拥有正常Activity的生命属性。而插件Activity的非生命周期的重要函数入setContentView()则调用了代理Activity的对应函数,从而实现资源的通用。
一.概述
插件化,简单来说就是在不更新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对象
1.所有插件Activity都要继承插件的基类
而插件基类Activity内部重写了Activity的一些基本方法,主要就是判断该Activity是当做普通apk使用的还是当做插件使用的。如果是当做插件使用,则其在attach()的时候会得到代理Activity的一个引用,然后很多插件Activity的内部方法就都间接使用代理Activity的方法。如设置布局文件的setContentView()
查找view的id
获取资源
等等等等。。。。。。。。。
四.总结
在宿主代理Activity拥有插件Activity的对象引用,在插件Activity里也拥有宿主Activity的对象引用。其作用是,代理Activity在其生命周期函数里调用插件Activity的对应生命周期函数,从而产生插件Activity拥有正常Activity的生命属性。而插件Activity的非生命周期的重要函数入setContentView()则调用了代理Activity的对应函数,从而实现资源的通用。