生态桌面应用

应用和事件循环

创建应用、监听生命周期、使用计时器并安全退出事件循环。

每个进程通常创建一个应用,由它持有窗口、托管图片、托管计时任务、监听和事件队列。 运行必须在 VM 所有者线程调用,且同一应用不能并发运行两次。生命周期只沿就绪、 运行中、退出请求、已退出和已关闭前进;已经退出的应用不能再次运行。

引「包:言界」为 界面;

定 应用 为 界面.应用(「事件循环示例」);
定 窗口 为 应用.窗口({「标题」:「生命周期」,「宽」:560,「高」:320});
定 状态 为 窗口.列({「内边距」:20}).文字(「等待事件」);

法 一秒后(所事件) 则
    状态.内容(「计时器已触发」);
终

法 关闭(所事件) 则
    应用.退出();
终

应用.定时器(1000,假,一秒后);
窗口.关闭时(关闭);
窗口.显示();
应用.运行();
定 关闭报告 为 应用.关闭();

定时器(毫秒,重复,回调)最小间隔为 10 毫秒,并返回托管任务。任务可查询状态、触发 次数和结构化错误,也可幂等取消/关闭;一次任务回调完成后自动归还平台配额,回调失败只 使该任务进入失败。回调不是操作系统线程回调,而是和窗口事件一样进入有界宿主队列,再由 事件泵在言序线程执行。

周期动画不要使用计时器猜测显示节奏。调用窗口.动画(配置,更新回调)后,言界以匹配的 帧呈现事件和进程内单调时间推进任务;每窗只保留一个待呈现帧,被替换帧不会继续驱动动画。

应用级监听(事件类型,回调)可处理启动、激活、失活、退出请求、系统主题和显示器变化。 窗口未处理的退出请求会结束循环;显式调用退出只请求停止,运行返回后再由关闭按 计时器、窗口、图片、监听和原生应用继续最佳努力清理。关闭报告可 JSON 序列化,生产应用 应记录其中的失败步骤;重复关闭返回同一结果,不再次释放资源。

事件队列最多保留 4096 项。指针移动、窗口缩放和重绘会保留最新状态,滚轮在同一批次累积, 因此繁忙时不会因每个物理事件都跨 ABI 而无限增长;离散事件满时会以稳定错误停止循环, 而不是静默丢失。应用可读取内容安全的诊断快照观察队列水位、资源、帧、配额和生命周期。