运行时与集成

安全取消 Android 端侧 AI 后台任务

取消表示请求停止后续工作并执行清理,不保证每个原生操作立刻中断。

审核状态: 内容已校验;中文稿供用户审核 · 2026-10-03 · Fact IDs: ANDROID-BG-01, COVE-LIFECYCLE-01, ANDROID-WORK-CANCELLATION-2026-01

直接回答

取消是停止后续工作并配合清理的请求,并不证明每个原生操作都会瞬间停止。对 WorkManager,Android 文档支持按 ID、唯一名称或 tag 取消,并说明运行中的 Worker 会收到停止回调。Worker 应检查停止状态、中止长循环、关闭文件和数据库句柄,并避免把部分模型文件发布为完整制品。进程内协程的寿命不同:进程结束时它会停止,并应遵守结构化取消。界面需区分正在取消、已取消、已完成和失败。 本地 AI 任务常由多个阶段构成:排队、模型加载、读取文件、媒体预处理、推理、校验、保存结果和更新界面。取消策略要说明哪些阶段可以完成、哪些必须停止。若模型加载无法中断,应用可等它结束后关闭运行时,再显示取消完成。文件传输取消后,只有可恢复下载契约允许后续验证时才保留部分字节。上游任务产生部分结果,不代表下游 Worker 可以继续。 给每个任务稳定 ID 和唯一所有者。取消按钮必须调用真实 Worker、协程 Job 或运行时取消 API;隐藏进度条或移除界面订阅并不一定停止计算。还应防止旧结果在用户切换任务后写入。使用唯一工作名称或显式去重键避免重复 Worker。替换 WorkRequest 时要理解所用策略会否取消旧任务、依赖任务是否一并取消。 取消也要明确保护用户数据。用户可能希望保留已捕获图片或提示词,即使推理被取消;临时下载或解码缓冲则可以在安全清理后删除。按数据类型做保留决定。若共享模型文件仍被其他任务使用,不能把最终文件删除。记录任务阶段与结果,但不要把私人原文写入日志。 在开始前、模型初始化中、预处理时、推理时、推理与持久化之间以及重试排队时分别测试取消。验证回调、任务状态、资源关闭次数、是否存在迟到写入,以及新请求能否启动。持久 WorkManager 任务还要在进程重建后测试;普通协程应视为进程死亡后已结束,而不是可恢复。 实用契约需要取消令牌或 Job、稳定请求身份、幂等状态转换和最终清理块。明确取消是尽力而为还是硬停止、哪些操作仍可能完成、界面如何报告。运行时若只提供协作式取消,就不能宣传立即强停。目标是语义清楚且响应及时的取消,不只是一个空转圈。

用户取消后台模型任务后立刻重试

用户排队了一个端侧摘要任务,等待时点击取消,随即开始处理另一份文档。旧 Worker 可能仍在收尾文件或返回推理流。

决策

通过真实执行所有者取消,隔离两个请求身份,配合关闭资源,并拒绝旧任务的迟到结果。

预期结果

只有新任务能更新当前页面;旧任务会显示安全的已取消或正在停止状态。

需要收集的证据

只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:

  • 执行所有者和取消 API
  • 停止回调与资源关闭
  • 无迟到结果和重试冲突测试

只有记录了模型身份、构建配置、实际后端、任务样例和失败情况,运行时比较才可复核。

实施流程

  1. 把取消路由到执行所有者. 先确定任务属于 WorkManager、进程内协程、前台服务还是原生推理。仅隐藏界面或销毁订阅不够;应调用所有者文档规定的取消 API。
  2. 协作式停止并释放资源. 在阶段边界和长循环中检查取消。通过 finally 或 Worker 停止回调关闭文件、数据库、录音和运行时句柄;不要删除其他任务仍在使用的最终制品。
  3. 保护状态和后续副作用. 将结果绑定到请求身份,拒绝已取消或过期任务的写入。检查唯一工作替换策略和依赖链,确保后续任务不会意外继续。
  4. 测试时间窗口和重试. 分别在开始前、加载、预处理、推理、保存前及重试排队时取消。确认资源只关闭一次、没有迟到写入、日志安全,并且清理后新请求可以运行。

让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。

验收标准

  • 用户操作确实到达 Worker、Job、服务或运行时所有者。
  • 取消按 API 契约阻止旧结果持久化并释放资源。
  • 新任务可以启动,旧回调不会覆盖其状态或继续使用旧输入。

决策对照表

维度选择或证据解读方式
隐藏进度指示器只改变 UIWorker 或原生推理可能继续运行并保存结果。
取消 Worker 或协程 Job面向所有者的取消根据 API 停止或发出停止请求,并需实现清理回调。
强制结束进程突然停止可能丢失可恢复状态,不能替代正确清理契约。

需要避免的失败模式

  • 只隐藏进度指示器
  • 取消后仍持久化旧结果
  • 误删其他任务正在使用的最终文件

还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。

最小复现记录

层级记录内容
设备厂商、型号、芯片、内存档位、操作系统版本
软件应用版本和 Git 提交号
模型系列、变体、版本、格式、文件长度、摘要、量化方式
运行时名称、版本、请求后端及实际后端证据
工作负载样例版本、输入摘要、提示词摘要、输出策略
结果完成、失败、取消、回退及保护隐私的诊断信息

发布检查表

  • ☐ 主要搜索问题已回答,且没有未经支持的数字。
  • ☐ 所有模型文件和运行时版本均已固定。
  • ☐ 代表性任务和失败处理策略均有说明。
  • ☐ 生命周期、取消、清理和回退均已测试。
  • ☐ 用户内容与网络边界均有说明。
  • ☐ 结论只适用于被记录的配置。
  • ☐ 新增测试结果时链接到原始方法或证据。

来源与相关证据

中文部署与排错专题见。奇连 AI 端侧专题。

常见问题

取消 WorkManager 会立刻停止 Worker 吗?

取消会更新任务状态并通知运行中的 Worker 停止;Worker 仍需配合中止并释放资源。不能假设用户点击时所有原生调用都同步中断。

隐藏加载界面足以取消推理吗?

不够。移除界面订阅或导航离开,不一定停止执行所有者。应向 Worker、协程、服务或运行时操作传递取消。

取消后要删除未完成的模型文件吗?

只有当下载策略认定部分字节不安全或不可复用时才删除。验证身份后可保留可恢复数据;不能删除其他任务正在使用的最终制品。