android 插件化热更新,Android 插件化 动态加载Activity

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

之前介绍了如何热更新如何动态加载资源,可参考:

现在我们来看看如何动态加载Activity?

首先有的人可能会问,activity也是一个类,不同样可以使用DexClassLoader加载上来吗?

activity是个类没错,但特殊的是activity有生命周期的,比如我们平时使用activity时会有onCreate onStart … 如果按普通的类加载显然这些生命周期并不会正常回调,activity也不会正常使用。

目前使用的方案有反射实现、接口实现、Hook实现。反射实现有性能问题所以暂不介绍,我们先来介绍一下接口实现方式。

接口实现方式有已经完成的框架 dynamic-load-apk大家可参考使用。

我们来实现一个简单的Demo来看看接口方式实现有哪些优缺点?

什么是接口实现方式呢?

我们可以这样理解,在我们的APP中(也就是宿主APP)的activity是有完整的生命周期的,但Plugin APP中的activity是没有,我们需要让插件中的activity具备生命周期,那我们是否可以使用宿主APP中的activity来通过接口的方式让插件APP中的activity同样具有生命周期呢。

话不多说上代码:

我们先来定义一个module工程用于作为宿主APP与插件APP共同的依赖库。

然后定义一个插件契约接口1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16public interface{

void onCreate(Bundle saveInstance);

void attachContext(FragmentActivity context);

void onStart();

void onResume();

void onRestart();

void onDestroy();

void onStop();

void onPause();

}

宿主APP与插件APP都依赖该库,如:

2019-07-31-16-36-41.png

宿主APP中我们需要一个管理插件的类来完成插件的管理工作,如:1

2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值