1.1 SplitInstallAsyncTask 概述
SplitInstallAsyncTask 是 Android 动态分发(Split Install)体系中的核心异步操作抽象层。它将 Play Core 库中与分块安装相关的复杂回调、状态转换和线程调度封装为一个统一的任务单元,使开发者能够以声明式方式编排“下载 → 安装 → 激活”全过程。
1.1.1 作用
- 异步统一入口:封装
SplitInstallManager.startInstall()、cancelInstall()、getSessionState()等 API,对外暴露execute()和回调接口。 - 状态管理:维护任务从 Pending(待开始) → Downloading → Installing → Completed 的流转,并提供错误回退。
- 生命周期感知:自动绑定 Activity/Fragment 生命周期,避免因配置变更或进程重建导致任务丢失。
- 线程切换:内部使用
ListenableFuture或自定义线程池,保证回调在主线程执行。
1.1.2 适用场景
| 场景 | 说明 |
|---|---|
| 按需功能加载 | 如 AI 模型、AR 引擎、高分辨率素材,用户首次使用时触发按需安装。 |
| ABI 架构分发 | 仅下载与当前设备 CPU 架构匹配的原生库,减少包体积。 |
| 地区化资源包 | 根据系统语言或国家/地区动态安装对应语言包、主题资源。 |
| 测试分阶段发布 | Play Console 配置阶段性分发,SplitInstallAsyncTask 监听安装进度。 |
1.1.3 与 SplitInstallManager 的关系
SplitInstallManager 是 Play Core 库提供的底层管理类,负责与 Google Play 服务通信、执行文件传输、验证签名等。而 SplitInstallAsyncTask 是位于其之上的抽象层,两者的职责对比如下:
| 维度 | SplitInstallManager | SplitInstallAsyncTask |
|---|---|---|
| 定位 | 系统级 API 集合 | 应用层任务封装 |
| 暴露接口 | 多方法、多回调 | 单一 execute(…) + Listener |
| 状态机 | 隐式,需开发者自行维护 | 显式状态枚举与转换 |
| 生命周期 | 忽略 | 内置绑定与取消 |
| 错误处理 | 返回错误码、异常 | 统一转为 TaskFailedException |
核心原则: 在高级用法中,
SplitInstallAsyncTask 本身会持有 SplitInstallManager 实例,并通过其 startInstall 方法发起实际安装。两者的关系是“策略 + 引擎”:任务负责编排,Manager 负责执行。
学习提示: 本章后续的所有代码实现都将基于
SplitInstallAsyncTask 的 execute() 方法展开。理解它与 SplitInstallManager 的边界,有助于后续掌握 onProgressUpdate、onComplete 等回调的内部逻辑。
1.1.4 任务生命周期与组件关系图
常见误区: 部分开发者误以为
SplitInstallAsyncTask 是 SplitInstallManager 的替代品。实际上前者依赖于后者,两者是上下层协作关系,不可互换。在自定义线程模型或需要精细控制 session 时,仍需直接使用 Manager 的原始 API。