Service 插件化
Service 与 Activity 相比,在生命周期,系统维护方式以及用户交互上都有明显不同,因此 Service 的插件化也和 Activity 插件化有所区别。
首先,不再通过占坑的方式来启动。占坑方式的实现在我的理解有两种,一种是占坑 Activity 和 插件 Activity 一对一,随着插件 Activity 的增多,占坑 Activity 也会增多,另一种是一个占坑 Activity 对应多个插件 Activity,但在项目实际运行时还是一对一。不管哪种这种关系始终有限,而 Service 不太适合,有可能要求一次启动多个。
其次,通过代理的形式启动插件 Service。代理 Service 的作用就是代理插件 Service 启动,其实就是在启动插件 Service 的时候,通过代理 Service 来真的启动插件 Service。
-
步骤 1 实现代理 Service
代理 Service 要在启动后,根据传入的 Intent 启动插件 Service。 -
步骤 2 Hook IActivityManager
这步就是为了能够在 startService 的时候启动代理 Service,这样一来通过 Intent 传给代理 Service 来完成插件 Service 的启动。
Content Provider 和 Broadcast 插件化
这两个的插件化书中也是主要分析 VirtualApk 框架里的实现,鉴于这两个组件用的相对较少,也不会那么复杂,我打算就不做整理了。我觉得更适合放在使用或分析 VirtualApk 的时候来展开。
网友评论