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 是位于其之上的抽象层,两者的职责对比如下:

维度SplitInstallManagerSplitInstallAsyncTask
定位系统级 API 集合应用层任务封装
暴露接口多方法、多回调单一 execute(…) + Listener
状态机隐式,需开发者自行维护显式状态枚举与转换
生命周期忽略内置绑定与取消
错误处理返回错误码、异常统一转为 TaskFailedException
核心原则: 在高级用法中,SplitInstallAsyncTask 本身会持有 SplitInstallManager 实例,并通过其 startInstall 方法发起实际安装。两者的关系是“策略 + 引擎”:任务负责编排,Manager 负责执行。
学习提示: 本章后续的所有代码实现都将基于 SplitInstallAsyncTask 的 execute() 方法展开。理解它与 SplitInstallManager 的边界,有助于后续掌握 onProgressUpdate、onComplete 等回调的内部逻辑。

1.1.4 任务生命周期与组件关系图

SplitInstallAsyncTask 组件关系与状态流转 SplitInstallManager Play Core 底层 API SplitInstallAsyncTask 抽象编排层 持有 Pending Downloading Installing Completed 状态切换 说明 • Manager 只负责向 Play 服务发起请求和接收字节流,不关心业务状态机。 • AsyncTask 内部通过 Manager.startInstall() 获取 session,并轮询 getSessionState() 驱动状态。 • 异常状态(如网络失败、存储不足)会跳转到内部 error 分支,统一回调 onError。
常见误区: 部分开发者误以为 SplitInstallAsyncTask 是 SplitInstallManager 的替代品。实际上前者依赖于后者,两者是上下层协作关系,不可互换。在自定义线程模型或需要精细控制 session 时,仍需直接使用 Manager 的原始 API。