天天看點

Flutter 3.7 新特性:背景isolate通道使用介紹

作者:深夢未覺

Flutter 3.7引入了一項重要改進,允許開發者在任意isolate中使用插件和平台通道。這一功能自2018年以來備受期待,但由于實作複雜且存在解決方案,一直被降低優先級。然而,随着Flutter的不斷成熟和對性能的越來越高的關注,優化性能和提升易用性變得至關重要。

由于Flutter基于單線程設計,将較重的任務放在主線程上會導緻UI明顯示卡頓。而在3.7版本中,"聽書樓"音頻緩存功能的實作并沒有帶來明顯的UI卡頓。

這一成果得益于在任意isolate中使用插件和平台通道的新功能。通過将資源密集型任務分離到獨立的isolate中,主UI線程保持響應,進而實作更加流暢高效的使用者體驗。Flutter不僅注重"讓它工作",還追求"讓它正确"和"讓它快速"的目标。

建立receivePort建立與實作類的通信

Flutter 3.7 新特性:背景isolate通道使用介紹

由于Isolate.spawn隻能傳遞一個泛型參數,是以建立一個類把rootIsolate和mainPort傳遞給childIsolate

Flutter 3.7 新特性:背景isolate通道使用介紹

在實作類中接收端口,并建立一個

port2,使用receivePort發送port2信道給mainIsolate,至此主信道和子信道建立聯系,可以互相通信

Flutter 3.7 新特性:背景isolate通道使用介紹

mainIsolate擷取到childIsolate傳遞來的信道port,就可以把 緩存所需的參數傳遞給childIsolate開始下載下傳

Flutter 3.7 新特性:背景isolate通道使用介紹

childIsolate可以通過port傳遞不同類型消息,實作下載下傳進度,下載下傳完成通知

Flutter 3.7 新特性:背景isolate通道使用介紹