# 04 启动、3秒动态开场与前台服务 听文视频工作台 · 技术架构与实现 · 1.0.2 图示:原生开场与本机服务并行 原生开场与本机服务并行 计时条件 页面条件 失败/等待 Activity创建 隐藏WebView+开场覆盖层 Canvas首帧 记录uptime · 至少3000ms Service初始化 资源 · Python · 回环服务 WebView载入首页 Android密钥/页面ready 开场揭示闸门 首帧已发生+已满3秒+页面ready 进入四页工作台 延后通知权限申请 加载慢或启动失败 留状态/明确重试入口 图3|开屏揭示条件与服务并行初始化。3秒从首帧起计,加载失败不以空白页面冒充就绪。小屏可横向滚动查看图示 ## 启动序列 - Activity创建隐藏WebView与原生开场覆盖层;同时启动WorkbenchService。动画和业务初始化并行,不用固定sleep阻塞主线程。 - StartupAnimationView使用Canvas/Paint/Path和渐变绘制科技蓝背景、轨道、声波及“文字/声音/视频”阶段。设计坐标按屏幕映射,首个实际绘制帧记录SystemClock.uptimeMillis()。 - StartupTiming的时长常量为3000ms。显示页面需同时满足首帧发生、已满3000ms和pageReady=true;页面慢时保持加载状态,失败时显示错误与“重试启动”。 - Service立即建立低重要性通知渠道并进入前台。API34及以上使用FOREGROUND_SERVICE_TYPE_SPECIAL_USE;Manifest附带用户发起本机语音和视频任务的用途描述。 - 后台执行器将assets/workbench拷到getFilesDir()/workbench;模板和静态文件按前缀更新,其他已有文件通常保留。 - 启动Chaquopy Python;Java用SecureRandom生成32字节密钥(256bit),并转为64个十六进制字符的字符串保存在运行内存。 - 调用android_runtime.start(root,nativeDirectory,secret):设置环境、导入业务、替换视频worker、恢复任务状态、建立随机端口回环服务。 - Activity用X-Android-Key头载入首页。返回首页设置HttpOnly Cookie,让同源子资源继续通过Android密钥验证。 - 页面ready后等待开场满足计时条件,隐藏覆盖层。Android13及以上的通知权限请求延后至开场完成、页面ready且Activity恢复状态,避免遮住动画。 ## 关键常量与生命周期 项目 | 实际值/机制 | 开场最低时长 | 3000ms,从首个绘制帧起计 | 服务Host/Port | 127.0.0.1,端口0由系统动态分配;不是固定8091 | 通知渠道/ID | workbench_tasks/1001 | 服务状态轮询 | 每2秒调用Python status_json | 处理期唤醒 | PARTIAL_WAKE_LOCK,单次最长10分钟;仍忙时后续轮询可重新获取,空闲释放 | 服务重建提示 | START_STICKY;不能据此保证进程永远存活 | Activity销毁 | 销毁页面与预览资源,不主动停止前台服务 | copyAssets代码还检查previews/前缀,但真实试听位于assets/previews/,不能将其泛化为“升级一定覆盖所有已有试听”。本版本试听内容未调整;未来资源升级应按实际相对路径核验。 通知展示ACTIVE步骤汇总,例如“合成MP3/准备照片/合成MP4”;精确分段与编码进度属于任务页。唤醒锁仅影响部分CPU休眠,不能阻止所有厂商省电清理、强行停止或存储故障。 依据:StartupTiming.java:4–12、StartupAnimationView.java:35–94、MainActivity.java:72–145、WorkbenchService.java:28–103、android_runtime.py:168–197。 --- 招商合作微信:wzqy2019。添加备注:听文合作。 原网页:https://tingwen-creator-studio-102.pages.dev/guide/technical-04