Flutter 异步原理-Zone

news2025/5/11 2:07:17

前言
Zone 是 Dart 异步模型中的核心机制,主要用于:

  • 隔离异步上下文,形成逻辑上的执行环境。
  • 捕获未处理的异步异常,保证系统稳定。
  • 自定义异步任务的调度行为(比如微任务、Timer)。
  1. 什么是 Zone?
    Zone 是 Dart 中每一个异步执行单元的上下文环境。
  • 每个 Zone 可以拦截或修改异步相关行为。
  • Zone 形成树状结构(rootZone → 子Zone → 孙Zone…)。
  • 每次异步跳转(如 Future.then、Timer)都会绑定到当前 Zone。
  1. Zone 的核心功能
    功能
    说明
    捕获未处理异常
    handleUncaughtError 捕捉 Future/Timer/Stream 抛出的异常。
    修改异步行为
    可以重新定义微任务调度、定时器、打印等行为。
    绑定异步回调
    Future/Stream 自动记录当前 Zone,保证回调在正确 Zone 执行。
    提供 Zone-local storage
    每个 Zone 可携带私有数据。
  2. Zone 的重要API
    3.1 创建新 Zone

Zone.current.fork(specification: ZoneSpecification(…));
创建一个新的子 Zone,可以定制微任务调度、异常处理等行为。

3.2 运行代码

Zone.run(() {…}); // 普通运行,异常不自动捕获
Zone.runGuarded(() {…}); // 自动捕获同步异常

3.3 绑定回调

Zone.bindCallback(callback);
Zone.bindUnaryCallback(callback);
Zone.bindBinaryCallback(callback);

把 Future/Timer 等的回调绑定到当前 Zone 环境。

  1. ZoneSpecification 定制能力

通过 ZoneSpecification,可以拦截和修改各种异步操作,包括:

4.1 scheduleMicrotask

void scheduleMicrotask(void Function() callback);
  • 向微任务队列提交任务。
  • Flutter 中大量 Future.microtask、scheduleMicrotask 都经过这里。

示例:

ZoneSpecification(
  scheduleMicrotask: (self, parent, zone, f) {
    print('Microtask scheduled');
    parent.scheduleMicrotask(zone.bindCallbackGuarded(f));
  },
);

4.2 createTimer

Timer createTimer(Duration duration, void Function() callback);
  • 创建一次性定时器。
  • 可拦截 Future.delayed、Timer.run 等操作。

示例:

ZoneSpecification(
  createTimer: (self, parent, zone, duration, f) {
    print('Timer scheduled for $duration');
    return parent.createTimer(zone, duration, zone.bindCallbackGuarded(f));
  },
);

4.3 createPeriodicTimer

Timer createPeriodicTimer(Duration period, void callback(Timer timer));

  • 创建周期性定时器。
  • 可拦截周期性轮询任务。

示例:

ZoneSpecification(
  createPeriodicTimer: (self, parent, zone, period, f) {
    print('Periodic Timer scheduled every $period');
    return parent.createPeriodicTimer(zone, period, (timer) {
      zone.runUnaryGuarded(f, timer);
    });
  },
);

4.4 handleUncaughtError

void handleUncaughtError(Zone self, ZoneDelegate parent, Zone zone, Object error, StackTrace stackTrace);

  • 捕获未处理的 Future/Timer/Stream 异常。

示例:

ZoneSpecification(
  handleUncaughtError: (self, parent, zone, error, stackTrace) {
    print('Caught error: $error');
  },
);

  1. Flutter 中 Zone 的应用

Flutter 在启动时调用了:

runZonedGuarded(() async {
  runApp(MyApp());
}, (error, stack) {
  // 全局异常捕获
});

作用:

  • 保护整个 Flutter App 的异步执行。
  • 集中处理所有未捕获的异常。
  • 确保 Future/Timer/IO等异步异常不会直接 crash 程序。

Flutter 的 SchedulerBinding、Timer、GestureBinding、异步渲染逻辑等内部,也大量依赖 Zone 调度微任务或定时任务。

  1. 总结

核心概念
说明
Zone
异步上下文执行环境。
ZoneSpecification
拦截并自定义微任务/定时器/异常处理等。
scheduleMicrotask
拦截微任务提交。
createTimer/createPeriodicTimer
拦截定时器任务。
handleUncaughtError
捕获未处理异常。

Zone 是 Dart 异步调度的核心支撑,Flutter 的稳定性也依赖 Zone 提供的强大机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2372783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS学习——ArkTS语法介绍之基本知识

ArkTS是一种为构建高性能应用而设计的编程语言。ArkTS在继承TypeScript语法的基础上进行了优化,以提供更高的性能和开发效率。 目前流行的编程语言TypeScript是在JavaScript基础上通过添加类型定义扩展而来的,而ArkTS则是TypeScript的进一步扩展。TypeS…

电子电器架构 --- 网关转发时延解析

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

特殊配合力(SCA)作为全基因组关联分析(GWAS)的表型,其生物学意义和应用价值

生物学意义 解析非加性遗传效应 特殊配合力(SCA)主要反映特定亲本组合的杂交优势,由非加性遗传效应(如显性、超显性、上位性)驱动。显性效应涉及等位基因间的显性互作,上位性效应则涉及不同位点间的基因互作。通过SCA-GWAS,可以定位调控这些非加性效应的关键基因组区域…

2025年 全新 AI 编程工具 Cursor 安装使用教程

一、Cursor 软件下载 首选,登录Cursor官网,进行软件下载,官网下载地址如下: Cursor AI IDE 下载 二、Cursor软件安装配置 此处以Windows10系统安装为例,下载完成之后,右键安装包,以管理员身份…

HarmonyOS 鸿蒙操作物联网设备蓝牙模块、扫描蓝牙、连接蓝牙和蓝牙通信

01【HarmonyOS 蓝牙】 物联网无线传输方案、HarmonyOS蓝牙数据通信之前的准备工作 02【HarmonyOS 蓝牙】配置蓝牙权限 检测 打开 关闭蓝牙 扫描蓝牙 显示蓝牙设备 03【HarmonyOS 蓝牙】连接蓝牙 发现服务 获取特征值 读取信息 写入信息 和蓝牙模块交互 04【物联网 Wifi模块…

【质量管理】TRIZ因果链分析:解码质量问题的“多米诺效应“

为什么要使用因果链分析 没有发现问题并不等于没有问题。爱因斯坦曾说,如果我只有一个小时的时间来拯救世界,我将花45分钟时间分析问题,10分钟的时间来检查问题,最后5分钟的时间来解决问题。可见问题分析的重要性。 在质量管理实践…

解决librechat 前端界面没有google gemini 2.5模型的选项

问题概述 根据librechat 的更新清单,是支持了google gemini的模型,但是却找不到界面上较新的 2.5模型的配置选项。 通过查阅项目的文档(GitHub), 看到: 由于目前还不支持获取模型列表,因此您应…

项目实战-基于信号处理与SVM机器学习的声音情感识别系统

目录 一.背景描述 二.理论部分 三.程序设计 编程思路 流程图 1.信号部分 创建数据 generate_samples.py 头文件 生成函数 generate_emotion_sample 传入参数 存储路径 生成参数 创建基础正弦波信号 调制基础正弦波 对于愤怒可以增加噪声 归一化信号 存储 主函…

【论文笔记】SOTR: Segmenting Objects with Transformers

【题目】:SOTR: Segmenting Objects with Transformers 【引用格式】:Guo R, Niu D, Qu L, et al. Sotr: Segmenting objects with transformers[C]//Proceedings of the IEEE/CVF international conference on computer vision. 2021: 7157-7166. 【网…

23盘古石决赛

一,流量分析 1. 计算流量包文件的SHA256值是?[答案:字母小写][★☆☆☆☆] 答案:2d689add281b477c82b18af8ab857ef5be6badf253db1c1923528dd73b3d61a9 解压出来流量包计算 2. 流量包长度在“640 - 1279”之间的的数据包总共有多少…

LLM量化方法:ZeroQuant、LLM.int8()、SmoothQuant、GPTQ、AWQ

文章目录 TLDR;量化分类量化时机量化粒度ZeroQuant: Efficient and Affordable Post-Training Quantization for Large-Scale Transformers细粒度硬件感知量化低成本逐层知识蒸馏(Layer-by-layer Knowledge Distillation, LKD) LLM.int8(): 8-bit Matrix…

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件detect.py解读

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件detect.py解读 文章目录 【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件detect.py解读前言if name ‘main’parse_opt函数main函数run函数不同命令参数的推理结果常规推理命令推理命令(新增…

耳机插进电脑只有一边有声音怎么办 解决方法分享

当您沉浸在音乐或电影中时,如果突然发现耳机只有一边有声音,这无疑会破坏您的体验。本文将提供一系列检查和修复方法,帮助您找出并解决问题,让您的耳机恢复正常的立体声效果。 一、检查耳机连接是否正常 首先需要确认耳机与播放设…

Dp通用套路(闫式)

闫式dp分析法: 从集合角度来分析DP问题。 核心思想: DP是一种求有限集中的最值或者个数问题 由于集合中元素的数量都是指数级别的,直接用定义去求,把每种方案都用dfs暴力枚举一遍,时间复杂度很高,此时用…

华为设备端口隔离

端口隔离的理论与配置指南 一、端口隔离的理论 基本概念 端口隔离(Port Isolation)是一种在交换机上实现的安全功能,用于限制同一VLAN内指定端口间的二层通信。被隔离的端口之间无法直接通信,但可通过上行端口访问公共资源&#…

RabbitMq(尚硅谷)

RabbitMq 1.RabbitMq异步调用 2.work模型 3.Fanout交换机(广播模式) 4.Diret交换机(直连) 5.Topic交换机(主题交换机,通过路由匹配) 6.Headers交换机(头交换机) 6…

GAF-CNN-SSA-LSSVM故障诊断/分类预测,附带模型研究报告(Matlab)

GAF-CNN-SSA-LSSVM故障诊断/分类预测,附带模型研究报告(Matlab) 目录 GAF-CNN-SSA-LSSVM故障诊断/分类预测,附带模型研究报告(Matlab)效果一览基本描述程序设计参考资料 效果一览 基本描述 本研究提出的GA…

数据分析怎么做?高效的数据分析方法有哪些?

目录 一、数据分析的对象和目的 (一)数据分析的常见对象 (二)数据分析的目的 二、数据分析怎么做? (一)明确问题 (二)收集数据 (三)清洗和…

stm32之TIM定时中断详解

目录 1.引入1.1 简介1.2 类型1.2.1 基本定时器1.2.2 通用定时器1. 触发控制单元 (Trigger Control Unit)2. 输入捕获单元 (Input Capture Unit)3. 输出比较单元 (Output Compare Unit)4. CNT 计数器5. 自动重装载寄存器 (ARR)6. 预分频器 (PSC)7. 中断与 DMA 事件8. 刹车功能 (…

【el-admin】el-admin关联数据字典

数据字典使用 一、新增数据字典1、新增【图书状态】和【图书类型】数据字典2、编辑字典值 二、代码生成配置1、表单设置2、关联字典3、验证关联数据字典 三、查询操作1、模糊查询2、按类别查询(下拉框) 四、数据校验 一、新增数据字典 1、新增【图书状态…