Flutter混合开发实战(二)引擎预热和缓存
内容提要
本文介绍了在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方法配置路由生成。