天天看点

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通道使用介绍