Flutter中的一些知识概念总结

在学习Flutter一段时间后,有一些概念性的东西,还是打算写下来,记录一下。

Widget、Element、RenderObject

大家都知道Widget、Element、RenderObject,每个部分负责相应的功能,我们只需要写Widget就行,为什么还需要Element和RenderObject呢,这是因为Flutter为了在大量Widget时保证良好的性能,不能一直删除创建新的对象,可以复用原来的对象,比如复用Element,然后只需要修改RenderObject的内容,这样就能够降低性能损耗,提高流畅性。
在这里插入图片描述

Flutter Engine

在新版本的Flutter API中,我们可以使用源码依赖的方式和原生混合开发,里面提到了可以预热一个Flutter Engine,然后Cache保存起来,后续都使用这个Flutter Engine来处理Flutter页面,这样可以避免创建多个Flutter Engine,降低内存消耗。

那么Flutter Engine是什么呢?

Flutter Engine由C++实现,负责以下功能:

  • 线程管理
  • Dart VM状态管理
  • Dart代码加载,加载的代码跑在各自独立的Isolate中

Dart VM

运行Dart代码的地方

Isolate

类似于Java中的线程,但是Isolate没有共享内存,相互之间通过Port来收发数据,所以也就不存在锁的问题。

Widget的更新机制

当有父Widget的配置数据改变时,同时其State.build返回的Widget结构与之前不同,此时就需要重新构建对应的Element树。为了进行Element复用,在Element重新构建前会先尝试是否可以复用旧树上相同位置的element,element节点在更新前都会调用其对应Widget的canUpdate方法,如果返回true,则复用旧Element,旧的Element会使用新Widget配置数据更新,反之则会创建一个新的Element。Widget.canUpdate主要是判断newWidget与oldWidget的runtimeType和key是否同时相等,如果同时相等就返回true,否则就会返回false。根据这个原理,当我们需要强制更新一个Widget时,可以通过指定不同的Key来避免复用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值