Flutter学习笔记

2021-02-28  本文已影响0人  生产八哥
生命周期

Flutter生命周期说白了就是回调方法(函数),主要是监听Widget事件,内存管理(销毁).

16144928547460.png
widget与element与render

widget初始化时内部会隐式调用createElement

并不是所有的widget都会独立渲染,只有继承自RenderObjectWidget的才会创建renderObject对象。Flutter引擎是针对Render树进行渲染。

tree.png

直接在页面节点调用setState()将会重新调用所有Widget(包括他们中的各种嵌套)的build()方法,如果我们的需求是一个较为复杂的页面,这样带来的开销消耗可想而知。当我们在一个高节点调用setState()的时候会构建再次build所有的Widget,虽然不一定挂载到Element树中,但是平时我们使用的Widget中往往嵌套多个其他类型的Widget,每个build()方法走下来最终也会带来不小的开销,因此通过各种状态管理方案,Stream等方式,只做局部刷新,是我们日常开发中应该养成的良好习惯。


Key

Element的canUpdate比较的是runtimeTypeKey,运用了diff算法,所以为了更加精确的区分oldwidget和newwidget,需要在widget的初始化方法里传入Key:super(key:key);

GlobalKey:可以获取到对应的Widget的State对象,用来更新局部控件。_globalKey.currentState.setState();


优先级队列

then优先级最高,微任务scheduleMicrotask次之,Future最次。


混合开发

Flutter和原生来回切换会消耗性能内存泄漏
Flutter和原生通信需要用到MethodChannel.


参考链接1
参考链接2

上一篇 下一篇

猜你喜欢

热点阅读