GeWuYou a79f02c987 docs(api): 添加 Core API 参考文档与事件系统接口文档
- 新增 Core API 参考文档,涵盖架构与模块、数据模型与系统、命令与查询等核心组件
- 添加事件系统接口详细文档,包括 IEvent、IEventBus、IUnRegister 等接口说明
- 提供完整的 API 使用示例路径、最佳实践与性能建议
- 包含架构图、依赖关系图与故障排查指南
- 添加测试用例参考与扩展方法说明
- [skip ci]
2026-01-21 23:45:10 +08:00

16 KiB
Raw Blame History

UI 系统 API

**本文引用的文件** - [IUiRouter.cs](file://GFramework.Game.Abstractions/ui/IUiRouter.cs) - [IUiPage.cs](file://GFramework.Game.Abstractions/ui/IUiPage.cs) - [IUiRoot.cs](file://GFramework.Game.Abstractions/ui/IUiRoot.cs) - [IUiPageEnterParam.cs](file://GFramework.Game.Abstractions/ui/IUiPageEnterParam.cs) - [IUiTransitionHandler.cs](file://GFramework.Game.Abstractions/ui/IUiTransitionHandler.cs) - [IUiRouteGuard.cs](file://GFramework.Game.Abstractions/ui/IUiRouteGuard.cs) - [UiTransitionType.cs](file://GFramework.Game.Abstractions/enums/UiTransitionType.cs) - [UiTransitionPolicy.cs](file://GFramework.Game.Abstractions/enums/UiTransitionPolicy.cs) - [UITransitionPhases.cs](file://GFramework.Game.Abstractions/enums/UITransitionPhases.cs) - [UiRouterBase.cs](file://GFramework.Game/ui/UiRouterBase.cs) - [UiTransitionHandlerBase.cs](file://GFramework.Game/ui/handler/UiTransitionHandlerBase.cs) - [LoggingTransitionHandler.cs](file://GFramework.Game/ui/handler/LoggingTransitionHandler.cs)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件为 GFramework.UI 系统的 API 参考文档,聚焦于 UI 路由与页面生命周期管理。内容覆盖:

  • UI 路由器接口IUiRouter的核心导航与守卫能力
  • 基类实现UiRouterBase的职责与扩展点
  • 页面进入参数IUiPageEnterParam的使用方式
  • UI 过渡管道UiTransitionPipeline的配置项与阶段
  • 过渡处理器UiTransitionHandlerBase扩展机制与日志处理器
  • UI 页面接口IUiPage、UI 根节点接口IUiRoot的 API 说明
  • 常见用例的代码示例路径(以源码路径代替具体代码)

项目结构

UI 相关抽象位于 GFramework.Game.Abstractions具体实现位于 GFramework.Game枚举类型集中于 GFramework.Game.Abstractions/enums。

graph TB
subgraph "抽象层"
A["IUiRouter 接口"]
B["IUiPage 接口"]
C["IUiRoot 接口"]
D["IUiPageEnterParam 接口"]
E["IUiTransitionHandler 接口"]
F["IUiRouteGuard 接口"]
G["UiTransitionType 枚举"]
H["UiTransitionPolicy 枚举"]
I["UITransitionPhases 枚举"]
end
subgraph "实现层"
J["UiRouterBase 基类"]
K["UiTransitionHandlerBase 基类"]
L["LoggingTransitionHandler 日志处理器"]
end
A --> J
E --> K
K --> L
A --> F
A --> G
A --> H
A --> I
B --> A
C --> A

图表来源

章节来源

核心组件

  • IUiRouter统一的 UI 导航入口,负责页面压栈、弹栈、替换、清空、根节点绑定、守卫注册、过渡处理器注册等。
  • IUiPage页面生命周期回调涵盖进入、退出、暂停、恢复、显示、隐藏。
  • IUiRootUI 根容器,负责页面挂载、层级与 Z-Order 控制、可见页面查询。
  • IUiPageEnterParam页面进入参数载体接口用于携带导航参数。
  • IUiTransitionHandler过渡处理器接口支持阶段过滤、优先级、异步处理。
  • IUiRouteGuard路由守卫接口支持进入/离开校验与中断策略。
  • 枚举体系UiTransitionTypePush/Pop/Replace/Clear、UiTransitionPolicyExclusive/Overlay、UITransitionPhasesBeforeChange/AfterChange/All

章节来源

架构总览

UI 路由通过 IUiRouter 协调页面行为IUiPageBehavior由 IUiRoot 提供容器能力。过渡事件通过 IUiTransitionHandler 的链式处理,守卫通过 IUiRouteGuard 在路由决策阶段介入。UiRouterBase 作为默认实现,封装了页面栈、根节点绑定、过渡策略与处理器注册等通用逻辑。

sequenceDiagram
participant Caller as "调用方"
participant Router as "IUiRouter 实现"
participant Root as "IUiRoot"
participant Guard as "IUiRouteGuard 链"
participant Handler as "IUiTransitionHandler 链"
Caller->>Router : "Push(uiKey, param, policy, instancePolicy)"
Router->>Guard : "CanEnterAsync(uiKey, param)"
alt "允许进入"
Guard-->>Router : "true"
Router->>Root : "AddUiPage(page, layer, order)"
Router->>Handler : "BeforeChange 阶段处理"
Handler-->>Router : "完成"
Router->>Handler : "AfterChange 阶段处理"
Handler-->>Router : "完成"
Router-->>Caller : "完成"
else "拦截"
Guard-->>Router : "false"
Router-->>Caller : "失败"
end

图表来源

详细组件分析

IUiRouterUI 路由器接口

  • 栈管理
    • Count当前栈深
    • PeekKey/Peek/IsTop/Contains栈顶查询与存在性判断
  • 导航操作
    • Push(string uiKey, ...):按标识符压栈
    • Push(IUiPageBehavior, ...):按已有页面行为压栈
    • Pop(...):弹栈,支持销毁策略
    • Replace(...):替换全部页面(两种重载)
    • Clear():清空
  • 根节点与容器
    • BindRoot(root):绑定 UI 根节点
  • 守卫机制
    • AddGuard(guard)/AddGuard():注册路由守卫
    • RemoveGuard(guard):移除守卫
  • 过渡处理器
    • RegisterHandler(handler, options?)
    • UnregisterHandler(handler)

章节来源

IUiPage页面生命周期接口

  • OnEnter(param?):进入时调用,参数可选
  • OnExit():退出时调用
  • OnPause():暂停时调用
  • OnResume():恢复时调用
  • OnShow():显示时调用
  • OnHide():隐藏时调用

章节来源

IUiRootUI 根节点接口

  • AddUiPage(child)
  • AddUiPage(child, layer, orderInLayer)
  • RemoveUiPage(child)
  • SetZOrder(page, zOrder)
  • GetVisiblePages():返回当前显示页面列表

章节来源

IUiPageEnterParam页面进入参数接口

  • 用途:承载页面跳转时的参数数据结构
  • 说明:接口本身不定义字段,具体实现由业务定义

章节来源

IUiTransitionHandler过渡处理器接口

  • Priority优先级数值越小越先执行
  • Phases适用阶段UITransitionPhases
  • ShouldHandle(event, phases):条件过滤
  • HandleAsync(event, cancellationToken):异步处理

章节来源

IUiRouteGuard路由守卫接口

  • Priority、CanInterrupt
  • CanEnterAsync(uiKey, param?):进入校验
  • CanLeaveAsync(uiKey):离开校验

章节来源

枚举UiTransitionType、UiTransitionPolicy、UITransitionPhases

  • UiTransitionTypePush、Pop、Replace、Clear
  • UiTransitionPolicyExclusive独占下层 Pause+Hide、Overlay覆盖仅 Pause
  • UITransitionPhasesBeforeChange可阻塞、AfterChange不可阻塞、All两者皆执行

章节来源

UiRouterBase基类实现要点

  • 职责概览
    • 维护页面栈与当前顶层页面
    • 绑定 IUiRoot 并在 Push/Pop/Replace/Clear 时协调根节点
    • 应用 UiTransitionPolicy 与 UiInstancePolicy
    • 触发过渡事件并在 BeforeChange/AfterChange 阶段调度处理器
    • 执行守卫链路(可中断)
  • 关键流程
    • Push校验守卫 -> 创建/复用页面 -> 添加到根节点 -> BeforeChange -> AfterChange
    • Pop/Replace/Clear清理与替换策略 -> BeforeChange -> AfterChange
  • 扩展点
    • 通过 RegisterHandler/UnregisterHandler 注入自定义处理器
    • 通过 AddGuard/RemoveGuard 注入业务守卫

章节来源

UiTransitionHandlerBase过渡处理器基类

  • 作用:提供 IUiTransitionHandler 的便捷实现基类
  • 用法:继承后实现 ShouldHandle 与 HandleAsync并设置 Priority 与 Phases
  • 与 LoggingTransitionHandler 的关系:后者是内置的日志记录处理器,可直接注册使用

章节来源

依赖关系分析

  • IUiRouter 依赖 IUiRoot、IUiPage、IUiRouteGuard、IUiTransitionHandler、UiTransitionType/Policy/Phases
  • UiRouterBase 实现 IUiRouter并组合上述依赖
  • LoggingTransitionHandler 实现 IUiTransitionHandler常用于 AfterChange 阶段记录日志
classDiagram
class IUiRouter {
+Count : int
+BindRoot(root)
+Push(...)
+Pop(...)
+Replace(...)
+Clear()
+RegisterHandler(handler, options)
+UnregisterHandler(handler)
+PeekKey() : string
+Peek() : IUiPageBehavior
+IsTop(uiKey) : bool
+Contains(uiKey) : bool
+AddGuard(guard)
+AddGuard<T>()
+RemoveGuard(guard)
}
class IUiRoot {
+AddUiPage(child)
+AddUiPage(child, layer, orderInLayer)
+RemoveUiPage(child)
+SetZOrder(page, zOrder)
+GetVisiblePages() : IReadOnlyList
}
class IUiPage {
+OnEnter(param)
+OnExit()
+OnPause()
+OnResume()
+OnShow()
+OnHide()
}
class IUiTransitionHandler {
+Priority : int
+Phases : UITransitionPhases
+ShouldHandle(event, phases) : bool
+HandleAsync(event, ct) : Task
}
class IUiRouteGuard {
+Priority : int
+CanInterrupt : bool
+CanEnterAsync(uiKey, param?) : Task~bool~
+CanLeaveAsync(uiKey) : Task~bool~
}
class UiRouterBase
class UiTransitionHandlerBase
class LoggingTransitionHandler
IUiRouter <|.. UiRouterBase
IUiTransitionHandler <|.. UiTransitionHandlerBase
UiTransitionHandlerBase <|-- LoggingTransitionHandler
IUiRouter --> IUiRoot
IUiRouter --> IUiPage
IUiRouter --> IUiRouteGuard
IUiRouter --> IUiTransitionHandler

图表来源

性能考量

  • 页面实例策略UiInstancePolicy合理选择 Reuse 可降低频繁创建/销毁成本
  • 过渡策略UiTransitionPolicyOverlay 在多层页面时减少隐藏/显示开销,但需注意资源占用
  • 处理器优先级:将高频/轻量处理器置于高位,避免阻塞关键路径
  • 守卫链长度:控制守卫数量与复杂度,必要时采用异步快速通道

故障排查指南

  • 守卫拦截导致无法进入页面
    • 检查 CanEnterAsync 返回值与 CanInterrupt 设置
    • 示例路径:IUiRouteGuard.cs
  • 过渡卡顿或异常
    • 分离 BeforeChange 中的阻塞逻辑与 AfterChange 中的非阻塞逻辑
    • 示例路径:UITransitionPhases.cs
  • 页面未正确显示/隐藏
    • 校验 UiTransitionPolicy 与 IUiRoot 的 AddUiPage/SetZOrder 调用
    • 示例路径:IUiRoot.cs
  • 日志缺失

章节来源

结论

GFramework.UI 通过清晰的接口分层与可插拔的处理器/守卫机制,提供了高扩展性的 UI 路由与页面生命周期管理方案。开发者可通过 IUiRouter 统一编排页面导航,借助 IUiTransitionHandler 与 IUiRouteGuard 实现业务解耦与可观测性增强。

附录

常见用例与示例路径