Flutter3.7发布。我对背景隔离通道更感兴趣。我迫不及待地想翻译AaronClarke的文章。这是第一个翻译。如有不足之处,欢迎大家批评指正。指正,我会继续更新这篇文章,谢谢。原文地址:后台隔离通道介绍|通过亚伦克拉克|颤振|2023年1月|Medium此时此刻,我很高兴地宣布,从Flutter3.7开始,开发者可以在任何隔离区使用插件和平台通道。这是自2018年以来一直存在的问题,是我们排名最高的问题之一。它被取消了优先级,因为实现起来并不容易,并且存在一个解决方案,尽管很麻烦:始终在根隔离中使用插件(Flutter提供的那个)。然而,随着Flutter的成熟,人们越来越关注性能,正如俗话所说的“让它工作,让它正确,让它快速”。选择实现此功能有利于性能和易用性。因此,考虑到我们决定实施此功能的好处。如果你想学习如何使用这个功能,请查看GitHub上的示例代码(PS:原始示例代码没有,这里我使用另一个官方示例。)。用例为什么有人想在后台隔离中使用插件?显然,因为并不是世界上所有的代码都是用Dart编写的。多年来,社区一直致力于开发用于访问代码(非Dart实现)的插件,例如path_provider查找临时目录的能力或flutter_local_notifications发布通知的能力。另一个问题是:为什么有人会在后台线程中执行代码?因为有时候你别无选择,一个库可能会调用后台隔离回调,比如android_alarm_manager_plus。或者应用程序可能正在执行开发人员不希望影响UI的大量计算。在帮助谷歌其他团队使用Flutter的过程中,随着产品的演进,最终难免会遇到rootisolate瓶颈。因此,我们需要确保我们在框架中进行优化,并为开发人员提供必要时减少工作量的工具。这是背景隔离的人为用例:想象一个使用人工智能根据文本提示生成高分辨率图像的应用程序。用户之前的创作都保存在FirebaseCloud中,要求是用户可以随时用手机分享自己的创作。Flutterapp启动时,会打开后台隔离,从FirebaseCloudStore下载8K文字提示相关图片,压缩到指定大小导出,保存到相册,最后发送通知导出完成。本例中,后台隔离至少使用了3个插件,一个用于从FirebaseCloudStorage请求数据;然后保存到手机相册,保存后发送本地通知通知用户。如果没有背景通道,应用程序必须将根隔离中的8k图像复制到背景隔离中进行采样。当前的Dart版本不能保证复制过程时间保持不变。快速入门下面是一个使用新的API在后台isolate调用shared_preferences插件的例子:import'package:flutter/services.dart';导入“包:shared_preferences/shared_preferences.dart”;voidmain(){//rootisolatepass给后台isolateflag//(API从Flutter3.7开始)RootIsolateTokenrootIsolateToken=RootIsolateToken.instance!;Isolate.spawn(_isolateMain,rootIsolateToken);}void_isolateMain(RootIsolateTokenrootIsolateToken)async{//将后台隔离注册为根isolateIsolateBackingrary.ensureInitialized(rootIsolateToken);//你现在可以使用shared_preferences插件了。SharedPreferencessharedPreferences=awaitSharedPreferences.getInstance();print(sharedPreferences.getBool('isDebug'));}技术细节以下是平台通道如何工作的概述:当调用平台通道产生结果时,它将被硬编码到平台线程。为了保证后台isolate的正常运行,发送消息的isolate应该被hold住,这样引擎才能把结果调度到isolate的事件循环上。这是通过Dart的端口实现的。Dartports存储并持有isolate,这也是通过CApi调用这些isolate的唯一方式。另一个需要实现的功能是将背景隔离与根隔离相关联。这让我很惊讶,为了在引擎被销毁时关闭平台通道,我们应该知道与引擎关联的后台隔离,否则后台隔离可能会与被销毁的引擎通信,其效果可以在最终的API,必须使用RootIsolateToken来初始化BackgroundIsolateBinaryMessenger。有关实现的更多信息,请查看隔离平台通道设计文档。相反的沟通建议也包含在文件中,但尚未实施或接受。感谢Flutter社区的支持,希望大家能为这项新功能找到更多惊人的用途。如果您觉得文章对您有帮助,点赞,收藏,关注,评论,一键四连支持,您的支持就是我创作最大的动力。??本文原文在听蝉公众号:编程黑板报欢迎关注原创技术文章,第一时间推送??
