菜单

运行时系统

相关源文件

Tauri 运行时系统提供了应用程序逻辑与底层平台特定实现之间的核心抽象层。它使 Tauri 应用程序能够以跨平台的方式与原生窗口系统交互、管理 Web 视图以及处理事件。本文档将解释运行时架构、其关键组件以及它们如何交互。

有关实际应用程序实例的信息,请参阅App 和 AppHandle。有关窗口管理详细信息,请参阅窗口管理

概述

Tauri 中的运行时系统充当了您平台无关的应用程序代码与底层平台特定实现之间的桥梁。它提供了定义跨不同平台窗口、Web 视图和事件处理系统能力的 trait。

来源

核心运行时 Trait

运行时系统围绕一组核心 trait 构建,这些 trait 定义了创建和管理窗口、Web 视图以及处理系统事件所需的能力。

Runtime Trait

Runtime trait 是运行时系统的中心组件。它定义了 Tauri 应用程序与底层窗口系统交互所需的核心功能。

来源

关键运行时组件

运行时系统由几个关键组件组成

组件目的主要功能
运行时平台后端的核心接口创建窗口和 Web 视图,运行事件循环
RuntimeHandle到运行时的线程安全句柄从任何线程创建窗口/Web 视图
WindowDispatch控制窗口上的操作大小、位置、焦点等。
WebviewDispatch控制 Web 视图上的操作导航、脚本执行等。
EventLoopProxy将事件发送到事件循环应用程序的自定义事件

来源

事件系统

运行时事件系统是应用程序响应用户操作和系统事件的关键。事件从平台流经运行时,然后传递到应用程序代码。

RunEvent enum 代表了应用程序生命周期中可能发生的所有事件

RunEvent<T: UserEvent>
├── Exit
├── ExitRequested { code, tx }
├── WindowEvent { label, event }
├── WebviewEvent { label, event }
├── Ready
├── Resumed
├── MainEventsCleared
├── UserEvent(T)

来源

IPC 系统

进程间通信 (IPC) 系统使得 Web 视图中的 JavaScript 代码与应用程序后端中的 Rust 代码能够进行通信。

IPC 系统使用几种关键机制

  1. Commands: JS 到 Rust 的一次性请求
  2. Channels: 从 Rust 到 JS 的消息流
  3. Resource Handles: JS 对 Rust 对象的引用

来源

运行时实现

Tauri 提供了两种主要的运行时实现

Wry 运行时实现

主要的运行时实现基于 Wry 库,该库提供了跨平台的 Web 视图和窗口功能。此实现连接到平台特定的后端

平台窗口后端Web 视图实现
WindowsWinRT/Win32WebView2
macOSAppKitWKWebView
LinuxGTKWebKitGTK
iOSUIKitWKWebView
AndroidAndroid View SystemWebView

来源

模拟运行时(用于测试)

模拟运行时实现用于在不需要真实窗口系统的情况下测试 Tauri 应用程序。它模拟真实运行时的行为。

来源

应用集成

应用程序通过 Tauri API 与运行时进行交互,该 API 提供了对运行时功能的更高层接口。

应用程序生命周期与运行时

  1. 应用程序创建一个 Tauri 构建器
  2. 运行时被初始化
  3. 窗口和 Web 视图通过运行时创建
  4. 应用程序运行运行时的事件循环
  5. 事件被处理并传递给应用程序处理程序

来源

JavaScript API 接口

JavaScript API 提供了从 Web 上下文访问运行时功能。核心 API 函数被注入到全局的 window.__TAURI__ 对象中。

JavaScript API 通过几种机制与 Rust 后端通信

  1. Invoke API:用于基于命令的通信
  2. Event System:用于事件监听和触发
  3. Channel API:用于连续数据流
  4. Resource API:用于管理 Rust 支持的资源

来源

权限和安全

运行时系统与 Tauri 的权限系统集成,以控制对功能的访问

运行时的命令和事件受到权限系统的保护,该系统在应用程序的 capability 文件中定义。

来源

结论

Tauri Runtime System 是一个关键组件,它为窗口管理、Webview 控制和事件处理提供了一个跨平台抽象。通过其基于 Trait 的设计,Tauri 应用程序可以在不同平台上一致运行,同时利用特定平台的实现来获得最佳性能和原生集成。

运行时系统通过 RuntimeWindowDispatchWebviewDispatch 等 Trait 实现关注点分离,从而实现了一个清晰的架构,该架构支持测试、扩展,以及除了默认的 Wry 实现之外的其他运行时实现。