HarmonyOS 7 / API 26 3DGS 重建会话卡住排查:进度、取消和后台恢复实战
HarmonyOS 7 / API 26 3DGS 重建会话卡住排查进度、取消和后台恢复实战重建会话不是普通按钮点击HarmonyOS 7 / API 26 的 3DGS 端侧重建属于很典型的长任务。它和普通页面请求不一样普通请求失败了大不了提示重试重建任务一旦卡住用户可能已经等了几十秒设备也可能在持续发热页面退出后还可能留下半截状态。所以这类功能不能只写一个“开始重建”按钮。更稳的做法是把它看成一个会话开始、运行、暂停、取消、失败、恢复、落盘每一步都要有状态。我遇到这类问题时优先排查三个点排查点表现处理方向进度是否可信进度停在 40% 或 70% 很久不动给阶段超时和重试入口取消是否完整用户退出后后台还在跑页面销毁时取消或保存任务快照恢复是否可控切后台回来显示旧进度用 sessionId 对齐当前任务这篇只看 3DGS 重建会话本身不讨论模型首屏黑屏也不讨论 Spatial Recon Kit 和 ArkGraphics 3D 的职责边界。前者适合放到模型预览文章里后者适合放到架构边界文章里。这里专门处理“重建任务为什么卡住以及怎么把状态收回来”。官方能力边界和版本前提文章面向 HarmonyOS 7 / API 26。Spatial Recon Kit 负责空间重建相关能力ArkUI 页面负责展示状态和交互持久化层负责保存任务快照和产物路径。不要把长任务状态直接绑在一个页面组件实例上。接入前要先确认三件事当前设备是否支持相关系统能力输入素材是否满足重建要求应用在后台、横竖屏切换、多窗口状态下是否能恢复会话状态。只要这三件事没定住后面写再多进度条都不可靠。案例一进度停在 70% 不动第一个案例是重建进度卡住。页面上看起来还在运行但进度长时间不变化。开发者如果只显示一个百分比用户不知道是慢、卡住还是失败。复现步骤启动一次重建任务模拟某个阶段耗时过长例如特征匹配或 3DGS 表示生成页面进度停在同一个值超过阈值如果没有阶段超时页面会一直显示运行中加入阶段超时后页面能提示“当前阶段耗时过长”并提供取消或重试。type ReconStage prepare | extractFrames | matchFeature | buildGaussian | persist | done; interface ReconStageState { sessionId: string; stage: ReconStage; percent: number; startedAt: number; updatedAt: number; tips: string; } const STAGE_TIMEOUT: RecordReconStage, number { prepare: 5000, extractFrames: 15000, matchFeature: 30000, buildGaussian: 45000, persist: 10000, done: 0 }; export class ReconProgressWatchdog { isTimeout(state: ReconStageState, now: number): boolean { const limit STAGE_TIMEOUT[state.stage]; if (limit 0) { return false; } return now - state.updatedAt limit; } buildTimeoutTips(state: ReconStageState): string { return 重建任务停在 state.stage 阶段较久可以先取消并保留输入素材; } }这里不要只看总耗时。总耗时长不一定有问题因为素材复杂时本来就慢。真正有用的是阶段耗时哪个阶段长时间没有更新哪个阶段就要给用户一个明确反馈。页面状态要区分运行和卡住type ReconViewPhase idle | running | slow | failed | done; interface ReconViewState { phase: ReconViewPhase; percent: number; primaryText: string; secondaryText: string; canCancel: boolean; canRetry: boolean; } export function mapStageToView(state: ReconStageState, timeout: boolean): ReconViewState { if (timeout) { return { phase: slow, percent: state.percent, primaryText: 重建还在处理但当前阶段耗时偏长, secondaryText: state.tips, canCancel: true, canRetry: false }; } return { phase: running, percent: state.percent, primaryText: 正在生成 3DGS 空间模型, secondaryText: state.tips, canCancel: true, canRetry: false }; }这段映射看起来简单但作用很大。用户看到“运行中”和“偏慢”是不一样的开发者看到日志也能马上知道问题卡在哪个阶段。案例二切后台回来后旧任务状态覆盖新任务第二个案例更接近线上问题。用户开始了一次重建切到后台又回来重新点了一次开始。如果页面只用一个全局状态很容易出现旧任务回调覆盖新任务的问题。复现步骤第一次启动任务生成 sessionIdA应用切后台任务暂停或变慢用户回来后重新发起任务生成 sessionIdB旧任务 A 的回调晚到如果不校验 sessionId页面会被旧状态覆盖。interface ReconSessionSnapshot { sessionId: string; inputUri: string; stage: ReconStage; percent: number; outputUri: string; updatedAt: number; } export class ReconSessionStore { private currentSessionId: string ; private snapshot: ReconSessionSnapshot | null null; start(inputUri: string): ReconSessionSnapshot { const sessionId recon- Date.now(); this.currentSessionId sessionId; this.snapshot { sessionId, inputUri, stage: prepare, percent: 0, outputUri: , updatedAt: Date.now() }; return { ...this.snapshot }; } acceptUpdate(next: ReconSessionSnapshot): boolean { if (next.sessionId ! this.currentSessionId) { return false; } this.snapshot { ...next, updatedAt: Date.now() }; return true; } current(): ReconSessionSnapshot | null { return this.snapshot ? { ...this.snapshot } : null; } clear(sessionId: string): void { if (sessionId this.currentSessionId) { this.currentSessionId ; this.snapshot null; } } }这里的关键是 acceptUpdate。任何来自重建会话的回调都必须带 sessionId。只有当前会话才允许更新页面。旧任务晚回来只记录日志不覆盖 UI。取消动作要真正收尾重建任务取消不只是把进度条隐藏。至少要做三件事停止当前会话、保存可恢复信息、释放临时资源。interface ReconCancelResult { sessionId: string; stopped: boolean; retainedInput: boolean; message: string; } export class ReconCancelController { async cancel(session: ReconSessionSnapshot | null): PromiseReconCancelResult { if (!session) { return { sessionId: , stopped: true, retainedInput: false, message: 没有正在运行的重建任务 }; } await this.stopNativeSession(session.sessionId); await this.keepInputForRetry(session.inputUri); await this.cleanTempOutput(session.outputUri); return { sessionId: session.sessionId, stopped: true, retainedInput: true, message: 已取消重建输入素材已保留可以稍后重试 }; } private async stopNativeSession(sessionId: string): Promisevoid { console.info(stop recon session sessionId); } private async keepInputForRetry(inputUri: string): Promisevoid { console.info(keep input inputUri); } private async cleanTempOutput(outputUri: string): Promisevoid { if (outputUri.length 0) { console.info(clean temp output outputUri); } } }这样写的好处是取消以后用户还能重试开发者也知道临时产物有没有清掉。不要把取消写成“关闭弹窗”那只是界面消失了任务不一定停了。推荐的状态流阶段页面表现技术动作prepare检查设备和输入素材能力检测、文件校验extractFrames显示素材解析进度记录阶段开始时间matchFeature提示空间特征匹配阶段超时监控buildGaussian显示模型生成进度支持取消和失败恢复persist保存结果写入产物路径和封面done进入预览交给 ArkGraphics 3D 展示这个状态流不是为了好看而是为了避免“任务在跑但没人知道它跑到哪了”。3DGS 重建越耗时状态越要细。最后总结3DGS 重建会话卡住时不要只盯着百分比。百分比只是结果真正要看的是阶段、更新时间、sessionId、取消动作和恢复策略。HarmonyOS 7 / API 26 的 3DGS 能力适合做更有空间感的体验但接入方式不能停留在 Demo。只要涉及端侧重建就要把它当成长任务治理每个阶段有时间边界每个回调带 sessionId每次取消有收尾每个产物能落盘。这样页面才不会在后台恢复、弱设备、复杂素材里失控。

相关新闻

3分钟搞定!APK Installer:Windows上安装安卓应用的终极解决方案

3分钟搞定!APK Installer:Windows上安装安卓应用的终极解决方案

3分钟搞定!APK Installer:Windows上安装安卓应用的终极解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想在Windows电脑上直…

2026/10/16 20:57:39 阅读更多 →
怎样从零开始组装你的Ender-3 3D打印机:5个实用步骤指南

怎样从零开始组装你的Ender-3 3D打印机:5个实用步骤指南

怎样从零开始组装你的Ender-3 3D打印机:5个实用步骤指南 【免费下载链接】Ender-3 The Creality3D Ender-3, a fully Open Source 3D printer perfect for new users on a budget. 项目地址: https://gitcode.com/gh_mirrors/en/Ender-3 如果你是3D打印新手&…

2026/10/16 7:58:52 阅读更多 →
校园IoT门禁电控一体化方案:破解高校安防漏洞与运维降本难题

校园IoT门禁电控一体化方案:破解高校安防漏洞与运维降本难题

一、前言 随着智慧校园数字化建设持续深耕,高校后勤管理逐步从人工粗放运维转向智能化、精细化、节能化管控。学生宿舍、教学教室、实训功能房作为校园核心高频场景,长期面临人员混杂、身份核验松散、用电隐患频发、运维成本居高不下等行业痛点。传统机械…

2026/10/14 14:09:21 阅读更多 →

最新新闻

机器学习入门:从学习范式到反向传播的核心概念全解析

机器学习入门:从学习范式到反向传播的核心概念全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:54:48 阅读更多 →
Vue小白入门:一个HTML文件跑通响应式交互

Vue小白入门:一个HTML文件跑通响应式交互

简介:本资源是一份专为零基础初学者设计的 Vue 框架入门教程,面向前端开发新人、转行学习者及高校计算机相关专业学生,系统解决“Vue 是什么、怎么搭环境、如何写第一个应用、何时用生命周期钩子”四大核心问题。内容覆盖 Vue 渐进式特性、CD…

2026/10/17 9:54:48 阅读更多 →
ArcGIS Engine开发核心:ICommand与ITool接口实战解析

ArcGIS Engine开发核心:ICommand与ITool接口实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:54:48 阅读更多 →
树莓派扩展PWM控制舵机:PCA9685接线与驱动实战指南

树莓派扩展PWM控制舵机:PCA9685接线与驱动实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:54:48 阅读更多 →
Swagger注解不生效?版本冲突到配置缺失的完整排查指南

Swagger注解不生效?版本冲突到配置缺失的完整排查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:54:48 阅读更多 →
AI拉低攻击成本后,中小企业如何重新评估安全防线与防御策略

AI拉低攻击成本后,中小企业如何重新评估安全防线与防御策略

1. 当攻击成本被AI拉低,安全防线该怎么重新算账最近圈子里讨论比较多的一份报告,来自Anthropic的安全研究团队。标题翻译过来大概意思是:AI可能让更多公司变得“值得被攻击”。这句话乍看有点绕,但做过企业安全的人一眼就能品出味…

2026/10/17 9:53:48 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →