type
status
date
slug
summary
tags
category
icon
password
<ins/>
在 Flutter 中,热重载(Hot Reload) 和 热重启(Hot Restart) 是两种常用的开发工具,帮助开发者在调试和构建应用时更快地看到更改效果,但它们在操作方式和作用范围上有所不同:
1. 热重载(Hot Reload)
- 功能:热重载会将代码中的更改注入到正在运行的应用中,并重新构建 widget 树,从而反映 UI 的更新。
- 保留的状态:在热重载过程中,Flutter 会尽可能地保留 StatefulWidget 的状态。例如,如果页面中有一个计数器状态或是填写到一半的表单,热重载后这些状态不会丢失。
- 适用场景:适用于修改 UI(如布局和样式)、文本或业务逻辑代码。尤其在调试或进行小的 UI 更改时非常高效。
- 局限性:不适用于某些大范围的代码更改,例如类、StatefulWidget 的构造函数参数或全局变量的初始化更改。这些更改可能需要热重启才能生效。
2. 热重启(Hot Restart)
- 功能:热重启会重启整个应用,重新执行
main()
函数并重新加载所有代码。相当于让应用从头开始运行。
- 状态清空:热重启会清除所有状态,任何保存在 StatefulWidget 中的数据都会丢失。应用回到初始状态。
- 适用场景:用于那些热重载无法生效的更改,例如状态初始化、静态变量、依赖注入等方面的修改。
- 代价:相比热重载,热重启的速度稍慢,因为它需要重新加载所有代码并重新构建 widget 树,但比完整重启应用仍要快很多。
总结
特性 | 热重载(Hot Reload) | 热重启(Hot Restart) |
操作 | 注入更改到正在运行的应用 | 重启应用,从头开始加载 |
状态保留 | 保留 widget 树状态 | 清空所有状态 |
适用更改 | UI 和布局调整,小的业务逻辑修改 | 初始化数据、构造函数、全局变量等修改 |
速度 | 更快 | 稍慢,但比完整重启快 |
了解这两者的区别可以帮助开发者在开发过程中高效调试、快速迭代,提高开发效率。
<ins/>