已合并
fix foreground #20360
xhz-sz创建于 7 天前
fix foreground #20360
已合并
Pull Request已成功合入, 合并人@openharmony_ci
(感谢 xhz-sz 的贡献)afwk_helper
7 天前 评论:
7 天前 评论:
开始进行AI检视!
AI review has been started, please wait...


afwk_helper
7 天前 评论:
7 天前 评论:
| check type | result | report |
|---|---|---|
| start ai_review | pass | - |


7 天前 修改了pull request 的描述
xhz-sz
7 天前 评论:
7 天前 评论:
static-check


7 天前 添加了label:waiting_on_author
此处折叠了122条消息 查看更多
6 天前 通过审查
6 天前 关闭了关联的issue
6 天前 合入了pull request,合并节点 SHA:b075c697a766efe2361247cdaa55345bb96443fe
6 天前 删除了label:waiting_for_review
6 天前 添加了label:merged
IssueNo: https://gitcode.com/openharmony/ability_ability_runtime/issues/16115
Description:
稳定性自检:
安全编码自检:
TDD Result:
XTS Result:
是否已执行L0用例
AI检视评分(使用本地代码检视skills扫描):
代码检视报告 — PR #20360 OnAbilityRequestDone 白名单修复(Round 4 / 最新提交)
报告元数据
codecheck_report: schema_version: "1.0" scope: "PR20360-OnAbilityRequestDone-whitelist" round: 4 commit_id: "419289331a16b6d1da8bff820ab4177cb278f7e6" change_id: "N/A" report_id: "41928933-R4" date: "2026-09-03" gate_decision: "approve" risk_level: "low" score: 96 dimensions_required: ["security-scanner", "logic-scanner", "input-scanner"] dimensions_executed: ["security-scanner", "logic-scanner", "input-scanner"] findings_total: 2 findings_by_severity: {P0: 0, P1: 0, P2: 0, P3: 2} gate_blockers: [] must_fix: [] followups: ["LOG-01", "INP-01"]1. 门禁结论
一句话结论:将
OnAbilityRequestDone的黑名单守卫(仅拦 FOREGROUNDING)改为白名单(放行 BACKGROUND/INITIAL/INACTIVE/ACTIVE),在异步回调时点重新校验DoForegroundUIExtension的全部生命周期前置条件,修复高频振荡场景下 state 卡死 FOREGROUNDING 的问题,同时覆盖预加载和 connect-then-start 场景;三维度全 pattern 复核无 P0/P1。2. 扣分原因(仅 gate_decision=block 时呈现;approve/conditional/insufficient 时本节省略)
3. 必须立即处理(P0/P1)
无。
4. 建议本轮或下一补档处理(P2/P3)
UIEXTENSION_LAUNCH_TIMESTAMP_HIGH常量与ability_record.cpp:106重复定义5. 分维度速览
6. 关键发现详情
[LOG-01] 测试未覆盖 allow 路径(P3, scanner=logic-scanner)
test/unittest/ui_extension_ability_manager_third_test/ui_extension_ability_manager_third_test.cpp:120-175[INP-01] 常量重复定义(P3, scanner=input-scanner)
test/unittest/ui_extension_ability_manager_third_test/ui_extension_ability_manager_third_test.cpp:41vsservices/abilitymgr/src/ability_record.cpp:106UIEXTENSION_LAUNCH_TIMESTAMP_HIGH = "ohos.ability.params.uiExtensionLaunchTimestampHigh";ability_record.cpp:106 定义constexpr const char* UIEXTENSION_LAUNCH_TIMESTAMP_HIGH = "ohos.ability.params.uiExtensionLaunchTimestampHigh",两处独立定义相同字符串值,无 include 共享ability_record.cpp:106-107的常量声明提升到头文件,测试文件 include 引用附:修复方案技术摘要
根因
DoForegroundUIExtension→MoveToForeground→OnAbilityRequestDone(异步 IPC 回调)之间存在时序鸿沟。黑名单守卫仅拦截 FOREGROUNDING,漏放 FOREGROUND 状态——高频振荡中两次 MoveToForeground 的回调交错到达,先到的完成前台(state→FOREGROUND),后到的未被拦截,调ForegroundUIExtensionAbility把 state 打回 FOREGROUNDING 并发重复ForegroundNew,应用侧lifecycleState_已是 5 → "lifecycle state equal" 丢弃 → 无AbilityTransitionDone回调 → 卡死(LOG-008 状态机死锁)。修复
黑名单改白名单:放行
BACKGROUND/INITIAL/INACTIVE/ACTIVE,在异步回调时点重新校验DoForegroundUIExtension的全部生命周期前置条件。白名单状态与
DoForegroundUIExtension前置条件对齐:白名单拦截:FOREGROUND(9,防重复卡死)、FOREGROUNDING(11,防重复)、BACKGROUNDING(12,防干扰)、INACTIVATING(5,防干扰)、ACTIVATING(6,防干扰)、TERMINATING(8,终止中)、及所有 FAILED/INVALID/FREEZED/DO_NOTHING 状态。
白名单是
DoForegroundUIExtension前置条件允许集的严格子集(额外排除 FOREGROUND/ACTIVATING/TERMINATING/FAILED 状态),保证异步回调时点更保守地校验,正确性不受影响。Pattern 逐条复核