【OpenHarmony/HarmonyOs 】挑战模块如何接入实况窗基于计时器、暂停续答与进度状态的设计本文基于我的 OpenHarmony/HarmonyOS 项目「物理视界 PhysicsVision」整理。当前项目的挑战模块已经实现了题目进度、限时倒计时、暂停续答、得分、连对和结果统计。这一篇不是硬说项目已经接入实况窗而是基于现有代码完整设计“如何把挑战状态接入实况窗”。对应主题实况窗、全场景智慧生活。⏱️一、为什么挑战模块适合实况窗实况窗适合展示“正在进行中的任务状态”。在「物理视界」里最符合这个特征的就是知识挑战有当前题号有总题数有倒计时有得分有连对有暂停状态用户可能切到后台后再回来。如果接入实况窗用户即使暂时离开 App也能知道挑战是否还在进行。二、项目中已有的挑战状态挑战模块定义了这些状态StatequizState: string homeStatecurrentQ: number 0Statescore: number 0StateselectedAnswer: number -1Stateanswered: boolean falseStatetotalQuestions: number 10Statestreak: number 0StatemaxStreak: number 0StatetimeLimit: number 0StatetimeLeft: number 0这些状态正好可以映射成实况窗内容App 状态实况窗展示currentQ当前第几题currentQuestions.length总题数score当前得分timeLeft剩余时间streak连对数quizState进行中/暂停/完成也就是说接入实况窗不需要重写挑战逻辑只需要把现有状态同步出去。三、限时计时器实况窗最核心的数据源项目中的计时器逻辑startQuestionTimer(): void {this.stopQuestionTimer()if(this.timeLimit 0)returnthis.timeLeft this.timeLimitthis.questionTimerId setInterval(() {this.timeLeft--if(this.timeLeft 0) {this.stopQuestionTimer()if(!this.answered) {this.answered truethis.selectedAnswer -1this.streak 0} } },1000) }如果接入实况窗timeLeft每秒变化时就可以更新展示内容物理挑战进行中 第3/10题 · 剩余 12s · 得分 2当timeLeft 5时实况窗还可以高亮提醒。四、暂停续答实况窗的状态变化项目已有暂停逻辑pauseQuiz(): void {this.stopQuestionTimer()this.hasPausedQuiz truethis.quizState home}继续答题resumeQuiz(): void {this.hasPausedQuiz falsethis.cardAnim falsethis.quizState playing}对应到实况窗可以设计成进行中显示倒计时和当前题暂停中显示“有未完成挑战”已完成显示本次正确率。这种状态和 App 内部逻辑完全一致。五、答题进度展示挑战页内部已经展示进度Progress({ value: this.currentQ 1, total: this.currentQuestions.length }) .width(100%) .color(#1A73E8)实况窗中可以压缩为一句话进度 4/10或者进度条████░░░░░░40%对用户来说最重要的是知道自己还剩多少题。六、连对状态增强挑战感选择答案时更新连对if(index q.answer) {this.scorethis.streakif(this.streak this.maxStreak)this.maxStreak this.streak }else{this.streak 0}实况窗可以在streak 2时显示 连对3题这种信息不影响核心功能但能增强挑战氛围。七、点击实况窗回到挑战页挑战模块当前用quizState控制页面状态。如果实况窗点击回到 App只需要恢复到挑战 Tab并让quizState保持playing或home。项目已经支持暂停后显示“有未完成的挑战”if(this.hasPausedQuiz this.currentQuestions.length 0) { Text(有未完成的挑战) Text(进度 ${this.currentQ 1}/${this.currentQuestions.length}已得 ${this.score} 分) }这说明 App 内部已经有恢复入口实况窗只是增加系统级入口。八、隐私边界实况窗不展示敏感题目实况窗内容应该克制。不建议直接展示完整题目和选项因为锁屏或通知区域可能被旁人看到学习题目可能属于个人学习内容信息太长也不适合实况窗。推荐只展示当前进度剩余时间得分连对数点击继续。这符合隐私保护主题也更适合系统级展示。九、可落地的数据结构可以把挑战实况状态抽象为interfaceChallengeLiveState {title:stringcurrent:numbertotal:numberscore:numbertimeLeft:numberstreak:numberstatus:playing|paused|finished}每次答题、计时、暂停、完成时更新这个状态再同步到实况窗。十、总结「物理视界」的挑战模块已经具备接入实况窗的关键基础计时器、进度、暂停、续答、得分和连对。后续如果接入 HarmonyOS 实况窗不需要推翻现有结构而是把这些状态做系统级展示。这篇文章对应的主题是实况窗 全场景智慧学习 隐私克制展示。它从真实项目状态出发给出了一个可落地的扩展设计。⏱️