Flutter混合开发实战(二)引擎预热和缓存

💡 原文中文,约3700字,阅读约需9分钟。
📝

内容提要

本文介绍了在Flutter中如何跳转至其他路由页面的方法。首先需要在flutter模块中创建一个dart文件用来存储路由表,然后在main()函数中配置路由生成。在原生代码中传入指定页面的路由即可实现跳转。为了减少跳转时间,可以使用FlutterEngine进行预热,并在跳转时使用缓存的引擎。然而,使用缓存引擎会带来性能消耗。在原生和flutter之间进行跳转时,需要注意路由的变化。最后,解决无法回到原生页面的问题可以使用SystemNavigator.pop()方法。

🔎

延伸解读

引擎预热与缓存的性能权衡

使用FlutterEngine预热和缓存能显著减少跳转耗时,但预热本身需要时间,刚预热就跳转可能效果不明显。缓存引擎会延长Dart代码的生命周期,即使Flutter页面销毁,引擎仍可能运行,带来性能消耗。官方建议在不需要时调用destroy()释放资源,避免内存和计算资源浪费。

路由命名中的“/”陷阱

在Flutter路由表中,以“/”开头的路由名会被视为深链接,导致其前置路由也被自动加入路由栈。例如定义“/secondPage”时,初始页面“/”也会被添加,造成从原生跳转后,在Flutter页面调用pop会回到初始页面而非原生页面。将路由名改为不以“/”开头可避免此问题。

返回原生页面的正确方式

由于Navigator.pop是Flutter内部的路由方法,无法直接返回到原生页面。即使路由表只包含一个页面,调用pop也可能导致黑屏。此时应使用SystemNavigator.pop(),该方法会通知系统关闭当前Flutter页面,从而安全返回原生界面。

缓存引擎的状态保持问题

缓存引擎在Flutter页面销毁后仍保留状态,包括最后展示的页面。因此,即使重新设置初始路由,再次跳转时可能仍显示之前的页面。若需确保每次跳转都从指定页面开始,需在适当时候销毁并重建引擎,或通过其他方式重置路由状态。

❓

Q&A

如何在Flutter中跳转至其他路由页面?

需要在flutter模块中创建一个dart文件存储路由表,并在main()函数中配置路由生成,然后通过原生代码传入指定页面的路由实现跳转。

什么是FlutterEngine预热,它有什么好处?

FlutterEngine预热是提前初始化Flutter引擎,可以减少跳转时间,提高用户体验。

使用缓存的FlutterEngine会有什么性能消耗?

使用缓存的FlutterEngine会导致性能消耗,因为它会比展示的FlutterActivity或FlutterFragment存活得更久,Dart代码会继续执行。

如何解决无法回到原生页面的问题?

可以使用SystemNavigator.pop()方法来解决无法回到原生页面的问题。

在Flutter中如何处理路由变化?

在原生和Flutter之间跳转时,需要注意路由的变化,确保路由表的配置正确,以避免不必要的页面跳转。

如何配置Flutter的路由表?

在flutter模块中创建一个dart文件,定义路由名称和对应的页面,然后在main()函数中使用onGenerateRoute方法配置路由生成。

🏷️

标签

➡️

继续阅读