Avalonia11.2正式发布:跨平台应用开发的飞跃

程序员有二十年 2024-11-01 10:57:25

Avalonia UI 今日正式发布 11.2.0 版本,为跨平台 UI 开发带来了丰富的更新和优化,新增了 28 个功能,21 项增强,76 个修复项,和 37 项其他改进,为开发者提供了更强大的工具和更流畅的体验。

铱泓科技的开源项目 Semi.Avalonia 和 大熊Ursa 对 Avalonia 11.2.0 的正式适配即将完成,尽情期待。

🚀增强跨平台支持🚀

WASM 多线程渲染与调度支持:

此次更新为 WASM 引入了多线程渲染支持,优化了调度器,使 WebAssembly 应用的 UI 渲染更为流畅。在 .NET 9 的多线程模式下,画布可转移至 Web Worker 进行后台处理,大幅提升了响应速度。

macOS 原生嵌入支持:

Avalonia 11.2.0 允许开发者将 Avalonia 嵌入至 macOS 原生应用中,仅需一个 NSView 实例即可实现嵌入,满足不同项目需求。文本输入法与弹出窗口的交互也得到优化,进一步提升了用户体验。

引入基于 GLib 的调度器:

GLib-based dispatcher 的引入为基于 Avalonia 的应用提供了与其他 UI 框架(如 GTK)共存的可能。此实现允许 Avalonia 与其他依赖 GRunLoop 的工具(例如 GTK)在同一线程上运行,从而提升了跨平台的兼容性。

Metal 渲染默认启用:

为提升图形性能,macOS 和 iOS 端默认启用 Metal 渲染。相比 OpenGL,Metal 能更高效地调用设备 GPU 资源,带来更流畅的 UI 渲染,尤其适用于图形密集型应用。

重构了 AvaloniaInputConnection:

此重构使 Avalonia 更好地适配了多种 Android 输入法,不再局限于 GBoard,也对其他需要更高级别文本组合和预测的输入法有了更出色的支持。这对提升用户在 Android 平台上的输入体验起到了关键作用。

🚀性能优化🚀

提升 AvaloniaObject.GetValue 性能:

针对 AvaloniaProperty.GetValue() 方法的性能进行了显著提升,这是每次访问 Avalonia 属性时都会调用的重要方法。

优化 X11 启动延迟:

针对 X11 后端的启动延迟进行了显著优化。这一改进旨在提升应用程序的启动速度,让用户体验更加流畅。

使用 epoll 优化调度循环:

增加了对 epoll 的支持,以优化调度循环的性能,尤其在低性能设备上表现更为明显。

🚀用户界面和用户体验改进🚀

ToolTip新特性:

ToolTipOpening 和 ToolTipClosing 附加事件 以及 ToolTip.Opened 和 ToolTip.Closed,增强了 ToolTip 的功能,允许开发者更灵活地控制提示信息的显示与关闭。

自定义弹出窗口位置回调:

为 Popup 及基于 Popup 的控件(如 Flyout、Tooltip 和 ContextMenu)引入了 Placement.Custom 选项,使开发者能够更灵活地控制弹出窗口的位置。

ToolTip 内部使用 Popup,并修复关闭目标时 Popup 不关闭的问题:

通过将 ToolTip 的实现简化为基于 Popup,增强了代码的一致性和可维护性。

TreeViewItem更新:

将 TreeViewItem 展开状态暴露为根节点事件 为 TreeView 添加了一个路由事件,以便开发者能够便捷地追踪 TreeViewItem 展开状态的变化。

改善 TextTrimming 自定义体验:

通过将一些辅助函数的可见性从内部更改为公开,简化了自定义 TextTrimming 实现的过程。

🚀开发者生产力特性🚀

Screens API 重构:

新版本对 Screens API 进行了全面重构,使多屏幕管理更加稳定。开发者不必再每次手动获取屏幕实例,窗口变动时屏幕实例会自动更新,还新增了 DisplayName 和 CurrentOrientation 等属性,使屏幕管理更加直观和高效。

x:Shared 支持:

Avalonia 11.2.0 引入了与 WPF 类似的 x:Shared 支持,这一特性让资源共享更为便捷。开发者可以选择资源实例的共享方式,不仅简化了从 WPF 向 Avalonia 的迁移过程,还显著优化了内存使用和资源管理。

macOS 沙盒功能:

引入的 macOS 沙盒功能,旨在使 macOS 应用程序能够与 App Store 沙盒环境兼容。开发者需要注意与文件系统的交互,每次操作都需在安全范围会话中进行。

每个 RoutedEvent 可用作附加事件:

通过此次更新,所有的 RoutedEvent 都可以作为附加事件使用。如果事件名称以 Preview 为前缀,则处理程序将作为隧道事件注册。

Notification新API:

为 INotificationManager 和 IManagedNotificationManager 添加 Close 和 ClearAll 方法 本次更新为通知管理器接口添加了 Close() 和 ClearAll() 方法,同时为 Show 方法引入了 CancellationToken 参数。

为 TimePicker 控件添加对秒的支持:

本次更新为 TimePicker 控件新增了对秒的支持,添加了 UseSeconds 属性,默认为 false。这一更新增强了 TimePicker 控件的灵活性,使得开发者能够根据需求选择是否包含秒的设置。

为 DevTools 添加 HotKeys 页面:

新增了一个 HotKey 页面,以便用户能更方便地发现 DevTools 的快捷键,免去查阅文档的麻烦。

改进 DevTools 的设置值预览功能:

本次更新增强了 DevTools 的预览功能,以便在设置值时包括所有优先级的值,从而减少开发者的困惑。

实现了 IFormattable 接口:

在 KeyGesture 上实现 IFormattable 本次更新实现了 IFormattable 接口,增强了 KeyGesture 的可读性,尤其在用户界面中使用时,例如菜单。此次更新旨在提升用户体验,确保不同平台上的 KeyGesture 显示一致且易于理解。

🚀图形和动画增强🚀

实现PolyBezierSegment:

允许开发者使用任意数量的控制点绘制复杂的贝塞尔曲线,这为图形绘制提供了更大的灵活性,尤其在迁移 WPF 应用程序时,能够更轻松地实现复杂路径的效果。

引入的 VisualBrush 作为 OpacityMask 功能:

解决了之前只能使用颜色画刷作为不透明度遮罩的问题。通过这一改进,开发者现在可以使用 VisualBrush 创建更复杂的视觉效果。

🚀构建和部署改进🚀

Avalonia 单项目支持:

本次更新旨在简化创建 Windows、macOS、iOS 和 Android 平台的单项目过程,并允许使用 "net8.0-browser" 作为目标。

升级 DBus 栈:

本次更新提升了对 DBus 的支持,现在采用“官方”的 Variant 系统,从而提升了兼容性和功能性。此更新有助于更好地支持 DBus 通信。

支持 DisableRuntimeMarshalling 并修复 macOS Metal AOT:

本次更新为每个可修剪项目设置了 DisableRuntimeMarshalling,除非项目明确指定需要启用。

禁用 GetProcAddress 的运行时封送处理:

调整了 GetProcAddressInitializationGenerator,使其不再依赖于运行时封送处理,同时为 OpenGL、Vulkan 和 Android 项目禁用了该特性。

总结

Avalonia 11.2.0 标志着框架在跨平台 UI 开发上的一次重要飞跃。此次更新涵盖了丰富的功能与改进,展示了团队对提升开发者体验和应用性能的持续承诺。从WASM多线程渲染支持的引入到优化的 macOS 嵌入体验,再到更灵活的开发工具,这些新特性为开发者提供了更强大的创造力。

我们鼓励所有 Avalonia 用户尽快升级,深入探索这些创新功能。您的反馈和参与将继续推动 Avalonia 的发展,因此请随时与社区分享您的想法与建议。

祝您在开发过程中一切顺利,我们期待看到您用 Avalonia 11.2.0 创造的精彩应用。铱泓科技的开源项目 Semi.Avalonia 和 大熊Ursa 对 Avalonia 11.2.0 的正式适配即将完成,尽情期待。

0 阅读:2

程序员有二十年

简介:感谢大家的关注