
3DGS 重建跑到 90% 被切后台HarmonyOS 7 长任务的取消、恢复与资源回收先看问题是怎么发生的重建进度到 90% 时用户切到别的应用回来后页面从 0% 重新开始旧任务其实还在占用资源新页面又创建一份。另一些实现把页面销毁直接等同于取消导致用户只是旋转屏幕也丢掉全部进度。验证边界本文依据文末华为开发者官方资料整理并用可执行 TypeScript 状态模型验证应用侧分支。当前本机为 API 24 且未连接 HarmonyOS 7 真机文中的 API 26 代码属于接入骨架不声称已完成 API 26 编译、真机性能测试或设备兼容认证。上线前仍需在目标 SDK 和真实设备上补齐接口、异常码、权限与性能证据。根因和工程边界页面、业务任务和底层重建会话是三个生命周期。页面可以重建业务任务应由稳定 taskId 持有真正取消必须由用户动作或资源策略触发。应用记录最近可信检查点、底层状态和资源句柄恢复时先查询旧任务再决定继续、展示结果或创建新任务。案例一切后台十秒后返回页面重新绑定 taskId读取当前阶段和进度不创建第二个会话。若系统已暂停页面给出继续按钮而不是伪造进度动画。案例二用户明确删除采集项目先标记 cancelling等待底层确认或超时再释放输入帧、缓存和结果目录。删除按钮连续点击只产生一次取消请求。可以独立运行的状态模型type Phaseidle|running|paused|cancelling|done; class Task{phase:Phaseidle;start(){if(this.phaseidle)this.phaserunning}cancel(){if([running,paused].includes(this.phase))this.phasecancelling}} const tnew Task();t.start();t.cancel();t.cancel();if(t.phase!cancelling)throw new Error(取消状态失控);这个小模型只验证应用侧判断不替代 HarmonyOS 7 真机和目标 SDK。接入平台接口时应把调用放在模型确定的边界内并把真实错误码、日志和用户可见结果补进验收记录。为什么选择这条方案稳定 taskId 能把页面重建与任务重启分开。把任务对象放进页面局部变量最简单却无法解释后台、旋转和多窗口全局永不释放又会泄漏。更好的方案是有所有者、有过期策略、有明确取消结果。上线前验证清单验证项通过标准页面重建不生成第二个任务有可重复步骤、日志或可见结果后台返回读取真实进度有可重复步骤、日志或可见结果连续取消只发一次请求有可重复步骤、日志或可见结果取消超时保留可诊断状态有可重复步骤、日志或可见结果完成后恢复直接展示结果有可重复步骤、日志或可见结果官方资料与证据边界1. 空间计算能力接入2. 3DGS端侧重建课程3. 2026年9月开发者月刊可复用结论先把输入、所有者、生命周期和失败回退写成状态再接入平台能力。这样出现异常时可以回答“哪一步失败、谁负责释放、用户还能做什么”而不是靠重复调用掩盖问题。