refactor(ui): 优化UiRouterBase中的页面销毁和隐藏逻辑

- 区分永久移除和临时隐藏的处理流程,销毁时才调用OnExit方法
- 重构日志消息以更准确反映操作类型
- 简化离开守卫检查的循环逻辑,提高代码可读性
- 添加注释说明销毁与隐藏的不同行为
- 调整日志输出格式,保持一致性
- [release ci]
This commit is contained in:
GeWuYou 2026-02-06 23:05:09 +08:00
parent aaf728ad1a
commit 89227ff802

View File

@ -556,18 +556,27 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter
if (!layerDict.TryGetValue(uiKey, out var page)) if (!layerDict.TryGetValue(uiKey, out var page))
return; return;
page.OnExit();
page.OnHide();
if (destroy) if (destroy)
{ {
// 永久移除
page.OnExit(); // ✅ 只在 Destroy 时 Exit
_uiRoot.RemoveUiPage(page); _uiRoot.RemoveUiPage(page);
layerDict.Remove(uiKey); layerDict.Remove(uiKey);
Log.Debug("Suspend & Destroy UI from layer: {0}, layer={1}", uiKey, layer);
Log.Debug(
"Hide & Destroy UI from layer: {0}, layer={1}",
uiKey, layer
);
} }
else else
{ {
Log.Debug("Suspend & Suspend UI from layer: {0}, layer={1}", uiKey, layer); // 临时隐藏(可恢复)
page.OnHide(); // ✅ Hide ≠ Exit
Log.Debug(
"Hide UI from layer (suspend): {0}, layer={1}",
uiKey, layer
);
} }
} }
@ -695,11 +704,9 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter
return false; return false;
} }
if (guard.CanInterrupt) if (!guard.CanInterrupt) continue;
{ Log.Debug("Leave guard {0} passed, can interrupt = true", guard.GetType().Name);
Log.Debug("Leave guard {0} passed, can interrupt = true", guard.GetType().Name); return true;
return true;
}
} }
catch (Exception ex) catch (Exception ex)
{ {