4

Flutter混编工程之Engine复用

 2 years ago
source link: https://blog.csdn.net/eclipsexys/article/details/122955068
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Flutter混编工程之Engine复用

4e8bd70b0b85c3ff41001d9317a39780.png

点击上方蓝字关注我,知识会给你力量

2be672d1963709271dc480162a6e0032.png

Flutter混编上最大的一个问题,就是Engine的使用,从内存和性能,以及混合栈等多个层面上的综合考虑,业界给出了很多不同的Engine管理方案,就官方而言,在add2app文档中,就列出了几种不同的Engine管理方式,例如直接创建Engine、使用FlutterEngineCache等方式,官方文档如下所示。

https://docs.flutter.dev/development/add-to-app/android/add-flutter-screen#step-3-optional-use-a-cached-flutterengine

这些方案在文档上比较详细了,就不赘述了,这里重点讲解一种轻量级的Engine管理方式——Multiple Flutter Instance。

这是官方的一个比较新的Engine管理方案,它会创建多个彼此隔离的Flutter Engine,数据之间互不想通,以此缺陷来换取每个Engine的内存性能提升。

它有点像IT中的Thin Client的概念,每个Thin Client本身与其它多个Thin Client彼此隔离,但是却可以获取中央主机中的信息和数据,可以说,Multiple Flutter的方案,应该是Flutter团队在Add2App众多方案中的一个折中方案。在某些场景下来说,可行性比其它方案更好。

下面来看下Multiple Flutter的接入流程,首先,在Application中,创建FlutterEngineGroup并初始化。

接下来,新建一个Activity,继承自FlutterActivity,并在Manifest文件中申明,这些都是常规操作了。

最后,在FlutterActivity中,引用Engine。

newCodeMoreWhite.png

代码还是比较简单的,核心就是Engine的获取,通过FlutterEngineGroup提供的createAndRunEngine方法,就可以从FlutterEngineGroup中获取到一个「Thin Client」了。

这里还解决了使用Multiple Flutter的一个比较重要的问题,那就是初始路由的问题,通过dartEntrypoint,我们可以自定义初始路由的跳转,从而在多个不同的逻辑上,选择实际的跳转逻辑。

在Flutter只,我们需要给不同的dartEntrypoint增加入口函数。

这样就实现了多路由逻辑的跳转,对应的函数名,就是dartEntrypoint的name。

再配合上一期的「Pigeon高速路」,混编中对Engine的管理和数据通信的基本架构就建立好了。

向大家推荐下我的网站 https://xuyisheng.top/  点击原文一键直达

专注 Android-Kotlin-Flutter 欢迎大家访问

本文原创公众号:群英传,授权转载请联系微信(Tomcat_xu),授权后,请在原创发表24小时后转载。

< END >

作者:徐宜生

更文不易,点个“三连”支持一下👇


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK