From f34f98c1a06d9ed7579c93429bbe5246bcc02d00 Mon Sep 17 00:00:00 2001 From: kdletters Date: Thu, 18 Jun 2026 03:58:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=85=A5=E5=9B=BA=E5=AE=9A=E7=8E=A9?= =?UTF-8?q?=E6=B3=95=E5=AE=BF=E4=B8=BB=E7=94=9F=E5=91=BD=E5=91=A8=E6=9C=9F?= =?UTF-8?q?=E9=9F=B3=E9=A2=91=E6=9A=82=E5=81=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 useHostLifecycleActive 统一归一宿主生命周期状态 拼图和抓大鹅运行态背景音乐按宿主后台与失焦状态暂停恢复 useBackgroundMusic 复用统一生命周期状态避免重复订阅逻辑 补充生命周期音频测试和宿主壳架构文档 --- .../shared-memory/decision-log.md | 3 +- ...ExpoReactNative与Tauri宿主壳方案-2026-06-17.md | 4 +- ...前端架构】宿主壳能力统一协议-2026-06-17.md | 2 +- .../Match3DRuntimeShell.test.tsx | 133 ++++++++++++++++ .../match3d-runtime/Match3DRuntimeShell.tsx | 8 +- .../PuzzleRuntimeShell.test.tsx | 145 +++++++++++++++++- .../puzzle-runtime/PuzzleRuntimeShell.tsx | 17 +- src/hooks/useBackgroundMusic.test.tsx | 36 ++--- src/hooks/useBackgroundMusic.ts | 36 ++--- src/hooks/useHostLifecycleActive.test.tsx | 68 ++++++++ src/hooks/useHostLifecycleActive.ts | 19 +++ 11 files changed, 422 insertions(+), 49 deletions(-) create mode 100644 src/hooks/useHostLifecycleActive.test.tsx create mode 100644 src/hooks/useHostLifecycleActive.ts diff --git a/docs/project-memory/shared-memory/decision-log.md b/docs/project-memory/shared-memory/decision-log.md index 52c1e80c..10a1d44d 100644 --- a/docs/project-memory/shared-memory/decision-log.md +++ b/docs/project-memory/shared-memory/decision-log.md @@ -36,7 +36,8 @@ - 2026-06-18 移动图片导入:Expo 壳开始声明并实现 `file.importImage`,通过 `expo-image-picker` 请求相册权限并打开系统相册选择器,只允许 `image/png`、`image/jpeg`、`image/webp` 且单次不超过 10 MiB;成功只回传清洗后的文件名、MIME、base64 内容和字节数,不暴露设备本地 URI,不请求相机或麦克风权限,用户取消返回 `cancelled` 并由 H5 facade 归为 `false`。 - 2026-06-18 H5 图片上传接入宿主导入:`CreativeImageInputPanel` 在 `native_app` 且声明 `file.importImage` 时,主图上传和描述参考图上传优先调用 `importHostImageFile()`,并把宿主返回的 base64 图片转换为现有 `File` 回调;浏览器、小程序和未声明能力的裁剪壳继续走原生 `` 路径,不新增玩法侧上传分叉。 - 2026-06-18 桌面图片拖入接入主图槽位:`CreativeImageInputPanel` 在桌面壳声明 `file.imageDropped` 时订阅宿主拖入事件,只在拖入坐标命中当前主图卡片且未被上层元素遮挡时消费事件,避免窗口级拖入被多个创作面板同时接收;成功后仍转换为现有 `File` 上传回调。 -- 2026-06-18 H5 背景音乐接入宿主生命周期:`useBackgroundMusic` 订阅 `subscribeHostAppLifecycle()`,宿主进入后台、inactive 或桌面窗口失焦时降低音量并暂停音频循环,同时 `suspend` WebAudio context;回到 `active + focused` 且用户原本开启音乐时再恢复播放,不改变用户音量设置。 +- 2026-06-18 H5 背景音乐接入宿主生命周期:`useBackgroundMusic` 通过 `useHostLifecycleActive()` 消费 `subscribeHostAppLifecycle()` 的归一结果,宿主进入后台、inactive 或桌面窗口失焦时降低音量并暂停音频循环,同时 `suspend` WebAudio context;回到 `active + focused` 且用户原本开启音乐时再恢复播放,不改变用户音量设置。 +- 2026-06-18 固定玩法音频接入宿主生命周期:前端新增 `useHostLifecycleActive()` 统一消费 `subscribeHostAppLifecycle()`,`useBackgroundMusic`、拼图运行态和抓大鹅运行态都只依赖该归一状态判断音频可播放性;宿主 inactive、background 或窗口失焦时暂停 `