窗口启动与文档替换
先初始化平台,再创建窗口、加载文档并运行事件循环。窗口关闭后及时释放宿主资源;不要在文档重载后保留旧元素指针。
UI 线程与回调捕获
UI 操作由主线程处理。网络或文件任务在后台完成后,通过 Platform::postToMainThread 或对应绑定的投递入口回到 UI 线程。回调捕获的对象必须在执行时仍然有效。
本工程的所有权
Window 持有 Document,Document 持有元素。SettingsState 位于事件循环外层栈帧,在 run 返回前保持有效。工程不重新加载文档;若增加页面重载,需要移除旧回调并重新取得元素。
reset->addEventListener("click", [&](kui::Event&) {
name->setValue(state.name);
notifications->setChecked(state.notifications);
name->removeAttribute("aria-invalid");
status->setAttribute("data-state", "idle");
status->setTextContent(english ? "Restored the last saved values." : "已恢复上次保存的内容。");
});
异步任务返回界面
任务可以在后台执行,DOM 更新必须回到 UI 线程。
- 在 UI 线程读取本次任务需要的值,复制成业务数据。
- 后台处理文件、网络或计算,不捕获裸 DOM 指针后直接使用。
- 用 Platform::postToMainThread 派发结果;Go/Rust 使用绑定对应入口。
- 结果到达时确认窗口和页面仍有效;已关闭或切换页面的任务应丢弃结果。
生命周期故障
按现象缩小范围,再修改对应文件。
| 现象 | 检查与处理 |
|---|---|
| 重载后点击崩溃 | 重新查询节点、重建监听器;不要沿用旧文档的元素地址。 |
| 关闭后仍有回调 | 取消任务或使回调检查有效性;移除长期监听与计时器。 |
| 界面偶尔卡住 | 检查 UI 回调是否执行同步 I/O,确认消息循环持续运行。 |
文档有误或遗漏?
反馈此页问题 →