在Flutter中异步的底层机制来自Dart的Event Loop事件循环模型。核心组件有 4 个Event LoopEvent QueueMicrotask QueueFuture / async-await理解这套机制后你就能明白为什么 Flutter 不会因为Future而阻塞 UI。一、Flutter 为什么需要异步Flutter 是单线程 UI 模型UI Thread (Main Isolate)├─ Widget build├─ Layout├─ Paint├─ Gesture└─ async tasks如果同步执行耗时任务void main() {heavyTask(); // 2 秒runApp(MyApp());}UI 会卡住 2 秒。所以 Dart 使用事件循环 异步任务。二、Event Loop核心机制Dart 的运行模型Event Loop│┌──────┴────────┐│ │Microtask Queue Event Queue│ │优先执行 后执行执行顺序1 先执行所有 Microtask2 再执行一个 Event3 再清空 Microtask4 再执行 Event循环三、Future 是怎么工作的例如Future(() {print(future);});print(main);执行顺序mainfuture原因main 代码先执行Future 被放入 Event QueueEvent Loop 再执行流程main()│├─ print(main)│└─ Future → Event Queue│▼Event Loop│▼print(future)四、Microtask更高优先级Future.microtask(() {print(microtask);});Future(() {print(event);});输出microtaskevent原因Microtask Queue 优先执行顺序1 Microtask Queue2 Event Queue五、async / await 原理示例Futurevoid test() async {print(A);await Future.delayed(Duration(seconds: 1));print(B);}执行流程A(等待1秒)B底层其实是Future callback等价逻辑print(A)Future.delayed(...).then(() {print(B)})所以await Future.then()六、完整执行顺序例子void main() {print(1);Future(() {print(2);});Future.microtask(() {print(3);});print(4);}输出1432解释main stack├─ print 1├─ Future → Event Queue├─ microtask → Microtask Queue└─ print 4Event Loop├─ 执行 Microtask → 3└─ 执行 Event → 2七、Flutter Frame 与异步Flutter 每一帧约16ms流程Event Loop│├─ Input Event├─ Animation├─ Build├─ Layout└─ Paint如果某个任务超过 16msUI drop frame卡顿因此 CPU 密集任务需要Isolate八、Future vs Isolate特性FutureIsolate是否多线程否是是否阻塞不阻塞不阻塞CPU任务不适合适合IO任务适合不必要示例网络请求 → FutureJSON解析(10MB) → Isolate图片压缩 → Isolate九、Flutter 异步完整模型Flutter 实际运行模型Main Isolate│▼Event Loop│┌───┴────────────┐│ │Microtask Queue Event Queue│ │Future.then TimerscheduleMicrotask Future()Stream event外加Isolate (并发)Zone (异步上下文)十、最重要的理解很多人不知道Flutter不是多线程 async。真实情况async/awaitFutureStreamTimer全部都是单线程 Event Loop只有Isolate才是真正并发。✅一句话总结Flutter 异步 Dart Event Loop Future Microtask Queue所有 async/await 本质都是事件队列调度。
flutter基础05-异步
在Flutter中异步的底层机制来自Dart的Event Loop事件循环模型。核心组件有 4 个Event LoopEvent QueueMicrotask QueueFuture / async-await理解这套机制后你就能明白为什么 Flutter 不会因为Future而阻塞 UI。一、Flutter 为什么需要异步Flutter 是单线程 UI 模型UI Thread (Main Isolate)├─ Widget build├─ Layout├─ Paint├─ Gesture└─ async tasks如果同步执行耗时任务void main() {heavyTask(); // 2 秒runApp(MyApp());}UI 会卡住 2 秒。所以 Dart 使用事件循环 异步任务。二、Event Loop核心机制Dart 的运行模型Event Loop│┌──────┴────────┐│ │Microtask Queue Event Queue│ │优先执行 后执行执行顺序1 先执行所有 Microtask2 再执行一个 Event3 再清空 Microtask4 再执行 Event循环三、Future 是怎么工作的例如Future(() {print(future);});print(main);执行顺序mainfuture原因main 代码先执行Future 被放入 Event QueueEvent Loop 再执行流程main()│├─ print(main)│└─ Future → Event Queue│▼Event Loop│▼print(future)四、Microtask更高优先级Future.microtask(() {print(microtask);});Future(() {print(event);});输出microtaskevent原因Microtask Queue 优先执行顺序1 Microtask Queue2 Event Queue五、async / await 原理示例Futurevoid test() async {print(A);await Future.delayed(Duration(seconds: 1));print(B);}执行流程A(等待1秒)B底层其实是Future callback等价逻辑print(A)Future.delayed(...).then(() {print(B)})所以await Future.then()六、完整执行顺序例子void main() {print(1);Future(() {print(2);});Future.microtask(() {print(3);});print(4);}输出1432解释main stack├─ print 1├─ Future → Event Queue├─ microtask → Microtask Queue└─ print 4Event Loop├─ 执行 Microtask → 3└─ 执行 Event → 2七、Flutter Frame 与异步Flutter 每一帧约16ms流程Event Loop│├─ Input Event├─ Animation├─ Build├─ Layout└─ Paint如果某个任务超过 16msUI drop frame卡顿因此 CPU 密集任务需要Isolate八、Future vs Isolate特性FutureIsolate是否多线程否是是否阻塞不阻塞不阻塞CPU任务不适合适合IO任务适合不必要示例网络请求 → FutureJSON解析(10MB) → Isolate图片压缩 → Isolate九、Flutter 异步完整模型Flutter 实际运行模型Main Isolate│▼Event Loop│┌───┴────────────┐│ │Microtask Queue Event Queue│ │Future.then TimerscheduleMicrotask Future()Stream event外加Isolate (并发)Zone (异步上下文)十、最重要的理解很多人不知道Flutter不是多线程 async。真实情况async/awaitFutureStreamTimer全部都是单线程 Event Loop只有Isolate才是真正并发。✅一句话总结Flutter 异步 Dart Event Loop Future Microtask Queue所有 async/await 本质都是事件队列调度。