.NET 11 Preview 6 為 .NET MAUI 帶來了顯著的架構調整,核心目標在於徹底擺脫舊時代 Xamarin.Forms 的遺留結構,將其全面轉向現代化的 Handler 模式與 Source Generator 原始碼生成技術。對於開發者而言,這次更新不僅是效能的提升,更是為了讓跨平台應用在 Native AOT 等現代部署環境下能穩定運行。
CollectionView 效能升級與 CV2 的導入
在 MAUI 中,CollectionView 是處理大量數據列表的核心元件。本次更新將 CollectionView2(簡稱 CV2)正式引入 Windows 平台。
過去的實作方式在處理大量數據時容易遇到效能瓶頸。CV2 在 Windows 上改用 WinUI 的 ItemsRepeater 實作,這是一種虛擬化佈局技術,意即系統只會渲染螢幕上可見的項目,而非一次性載入所有數據。這讓 Windows 端的體驗與 Android 和 iOS 趨於一致,完整支援分組、選取、標頭與頁尾、空狀態視圖以及增量載入(Incremental Loading)等功能。
Android Shell 的 Handler 化轉型
Shell 是 MAUI 應用程式的導航骨架。在舊版本中,Android 端的 Shell 依賴於 Renderer 渲染器模式,這是一種較早期的封裝方式,耦合度高且擴展性較差。
Preview 6 將 Android Shell 重構為 Handler 模式。Handler 是 MAUI 的現代架構,它將跨平台介面與平台原生控制項解耦,讓開發者能更容易地自定義原生行為且減少記憶體開銷。目前此變更僅限於 Android,iOS 與 Mac Catalyst 仍維持原狀。如果你的專案中有深度自定義 Android Shell 的渲染邏輯,在升級至 .NET 11 時需要特別注意相容性測試。
Native AOT 與 HybridWebView 的優化
Native AOT(原生提前編譯)是 .NET 近年推動的重點,旨在將程式碼直接編譯成機器碼,大幅縮短啟動時間並降低記憶體佔用。然而,AOT 最怕的是 Reflection(反射),因為反射在運行時動態尋找類別,會導致編譯器無法確定哪些程式碼該被保留,進而導致 Trim(裁剪)過程將必要的程式碼刪除。
為了解決這個問題,HybridWebView 的 JavaScript 互操作機制現在改用 Source Generator(原始碼生成器)。Source Generator 會在編譯階段就生成好對應的程式碼,取代運行時的反射。這使得 HybridWebView 能在完全開啟裁剪與 Native AOT 的環境下正常運作,消除了之前的編譯警告。
Android 平台的功能補強
針對 Android 實務開發,本次更新解決了兩個痛點:
首先是媒體選取器的恢復機制。在 Android 上,當使用者開啟相機或相簿時,系統可能會因為記憶體壓力而終止背景的應用程式進程。當使用者選完照片返回時,應用程式會被重建,導致原本的選取結果遺失。新版本提供了 API 讓開發者可以獲取、等待或清除這些中斷後的媒體結果。
其次是地理位置監聽的精細化。新增的 MinimumDistance 屬性允許開發者設定距離門檻,只有當裝置移動超過指定公尺數時才觸發通知,有效降低電量消耗。
相容性包的移除與遷移警告
最需要注意的破壞性變更(Breaking Change)是 Microsoft.Maui.Controls.Compatibility NuGet 套件的移除。
這個套件原本是為了讓舊的 Xamarin.Forms 專案能平滑遷移到 MAUI 而設計的過渡橋樑。現在微軟正式將其移除,意味著所有依賴舊版渲染器(Renderers)的專案必須在升級到 .NET 11 之前完成遷移。如果你的專案僅引用 Microsoft.Maui.Controls 且沒有使用舊版相容元件,則不受影響。
總結
.NET 11 Preview 6 的核心邏輯是去舊迎新。透過將 Renderer 替換為 Handler,將 Reflection 替換為 Source Generator,MAUI 正在變得更輕量、更快速,並為完全的原生編譯(Native AOT)鋪路。
來源:infoq.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。