Flutter Engine预加载分析

预加载的好处:

加快Flutter页面的打开速度。

预加载的原因:

因为每个打开的Flutter页面,默认情况下都需要创建一个Flutter Engine,这个初始化是比较耗时的,所以可以考虑提前初始化一个Flutter Engine并保存起来,后续可以省去初始化的时间而直接使用。

预加载的实现:

以android端为例,ios基本类似

//在应用初始化时,执行如下代码,创建一个flutter engine,并以一个key值保存起来。
// Instantiate a FlutterEngine.
    flutterEngine = FlutterEngine(this)

    // Start executing Dart code to pre-warm the FlutterEngine.
    flutterEngine.dartExecutor.executeDartEntrypoint(
      DartExecutor.DartEntrypoint.createDefault()
    )

    // Cache the FlutterEngine to be used by FlutterActivity.
    FlutterEngineCache
      .getInstance()
      .put("my_engine_id", flutterEngine)
  }

当需要打开FlutterActivity时,通过如下方法进行调用

 startActivity(
    FlutterActivity
      .withCachedEngine("my_engine_id")
      .build(this)
  )

如果不使用预加载的flutter engine,调用方式如下:

 startActivity(
         FlutterActivity
             .withNewEngine()
             .initialRoute("初始化路由")
             .build(context)
     )

上述两种方式除了是否使用预加载的flutter engine之外,第二种方式还能指定初始化的路由,这一点非常关键,因为通过指定路由能决定显示哪个页面,正是因为这一点导致无法在少儿词典中进行flutter engine的预加载。

预加载的限制

当创建一个预加载的flutter engine时,必须指定是加载的路由,如果不指定的话,就会加载默认的根路由。这样导致,当你使用预加载的flutter engine时,是无法重新定义路由的。

预加载的使用场景

1、希望预加载的页面路由必须是固定的,如果某些参数是通过初始化路由带到flutter侧的,那么这些参数在预加载flutter engine之前必须是确定的。
2、预加载的页面最好是对打开速度要求较高的页面,譬如首页。如果将其他一些优先级不是很高的页面提前预加载,反而会影响应用启动速度。

总结

少儿词典项目不引入预加载flutter engine的方案。
因为少儿词典内的flutter页面做了一个基础的封装,所有的flutter页面都会通过统一的入口来打开,打开的同时,还会将一些动态的初始化参数以initroute字符串的方式传递到flutter侧。这就意味着每次打开flutter页面都会传递参数,都需要设置initroute,这与预加载flutter engine的api是相冲突的。
少儿词典这样设计的好处在于,方便原生和前端的协作,相互之间只需要定义一个路由和参数名,就可以搭建好双端的通信协议,可以提高开发效率。

参考资料链接:https://flutter.dev/docs/development/add-to-app/android/project-setup

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
加载是指在应用程序启动之前提前加载某些页面或资源,以提高应用程序的响应速度和用户体验。在Flutter中,加载可以通过创建加载Flutter引擎来实现。引用\[1\]指出,当创建加载Flutter引擎时,必须指定加载路由,如果不指定,则会加载默认的根路由。这意味着在使用加载Flutter引擎时,无法重新定义路由加载的使用场景通常是在需要固定页面路由且对打开速度要求较高的情况下。例如,首页是一个常见的加载页面,因为它是用户首次打开应用程序时看到的页面。引用\[2\]提到,加载的页面最好是对打开速度要求较高的页面,而将其他优先级较低的页面提前加载可能会影响应用程序的启动速度。 需要注意的是,加载Flutter引擎除了是否使用加载之外,还可以指定初始化的路由。这一点在某些情况下非常关键,因为通过指定路由可以确定显示哪个页面。然而,这也导致了在某些应用程序中无法进行Flutter引擎的加载,比如在少儿词典中。引用\[3\]指出,少儿词典无法进行Flutter引擎的加载,可能是因为需要根据用户的输入动态确定显示哪个页面。 综上所述,加载是一种提前加载页面或资源以提高应用程序响应速度的技术。在Flutter中,加载可以通过创建加载Flutter引擎来实现。然而,加载的使用场景和限制需要根据具体应用程序的需求来确定。 #### 引用[.reference_title] - *1* *2* *3* [Flutter Engine加载分析](https://blog.csdn.net/HelloMagina/article/details/106091381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值