赞
踩
Hot Reload 只能在 Debug 模式下使用,因为 Debug 模式下,Flutter 采用的是 JIT( 动态编译),代码是运行在 Dart VM 上,JIT 将 Dart 编译成可以运行在 Dart VM 上的 Dart Kernel,Dart Kernel 可以动态更新,所以就实现了代码的实时更新功能。
1、首先会扫描代码,找到上次编译之后有变化的Dart代码;
2、将这些变化的Dart代码转化为增量的Dart Kernel文件;
3、将增量的Dart Kernel文件发送到正在移动设备上运行的Dart VM;
4、Dart VM接着将发来的增量Dart Kernel文件和原有的Dart Kernel文件合并,然后重新加载全新的Dart Kernel文件(这时候不会重新执行代码)
5、最后通知Flutter Framework重新构建Widget(Flutter的大多数视图刷新都是因为重构了Widget,但是此时会保留Flutter的之前状态);
简要说就是 1.扫描代码 2.生成diff 3.发送设备上的虚拟机 4.内核合并 5.重构组件
Provider、Bloc、GetX的使用区别和原理 - 简书
setState是一个添加标记的过程,在下一次绘制需要组成渲染的内容时会将标记为脏的element重新渲染,之后合到场景绘制。
- @protected
- void setState(VoidCallback fn) {
- _element.markNeedsBuild();
- }
- void markNeedsBuild() {
- if (!_active)
- return;
- if (dirty)
- return;
- _dirty = true;// 标记为dirty(脏的)
- owner.scheduleBuildFor(this);
- }
- void scheduleBuildFor(Element element) {
- if (element._inDirtyList) {
- _dirtyElementsNeedsResorting = true;
- return;
- }
- if (!_scheduledFlushDirtyElements && onBuildScheduled != null) {
- _scheduledFlushDirtyElements = true;
- onBuildScheduled();// 回调
- }
- _dirtyElements.add(element);// 添加到“脏”链表里
- element._inDirtyList = true;
- }
准确说有四种,其中三种是MethodChannel、EventChannel、BasicMessageChannel
用于native与flutter的方法调用
用于native单向的向flutter发送广播消息
用于native与flutter之间的消息互发。
让Flutter可以嵌套原生View到页面中也可以看作一种“特殊的通讯方式”
didUpdateWidget
生命周期不同,使用场景不同
createElement
build
createState——initState——didChangeDependencies——build——didUpdateWidget(update后都会build)——deactivate(类似onPause)——dispose(类似onDestory)
1.初始化调用createState 和 initState方法
2.组件创建 调用didChangeDependencies 和build
3.触发重build调用build(状态改变)
4.暂停和销毁调用deactivate和dispose
大家都知道Dart是单线程模型,在Looper里有一个微任务队列和事件队列,在循环的时候就会先遍历微任务队列再遍历事件队列再遍历微任务队列这样循环下去...
那么要让代码一步执行只需要把代码放进微任务队列或事件队列中就行了
- //微任务
- scheduleMicrotask((){
- //你需要执行的代码
- });
- //事件队列
- Timer.run((){
- //你需要执行的代码
- });
-
-
Future和Stream都是用于处理异步操作
简单来说
Future 单次异步事件 返回一次值,是不需要关闭的。直接return结果并使用then处理结果。
Stream 多次异步事件,未关闭的流是可以发射多次值的,一般都是需要关闭的。使用yield返回结果,使用await for处理结果。
(普通Stream属于单订阅流,通过Stream.asBroadcastStream()转换成广播流,广播流支持多个订阅者。)
Future适合一次性的异步操作,而Stream适合实时流式异步操作。
还有什么高频面试知识点欢迎留言!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。