flutter知识点---生命周期

Flutter 应用的生命周期涉及两个层面:Widget(组件)的生命周期应用程序(App)的生命周期。下面分别对这两个方面进行详细介绍:

Widget(组件)的生命周期

Flutter 中的 Widget 是构成用户界面的基本单元,分为无状态(StatelessWidget)和有状态(StatefulWidget)两种类型。它们各自具有相应的生命周期回调方法:

StatelessWidget(无状态组件)
  • build(BuildContext context):这是无状态组件唯一的生命周期回调。每当父组件重建(例如,由于父组件状态改变导致子组件需要重新渲染)或应用程序全局配置(如主题、方向等)发生变化时,build() 方法会被调用。此方法负责根据提供的 BuildContext 返回一个新的 Widget 树。
StatefulWidget(有状态组件)
  • createState():当 StatefulWidget 被插入到 widget 树中时,Flutter 框架会调用这个方法来创建与其关联的 State 对象。

  • State 类的生命周期方法

    • @override void initState():在 State 对象被创建并关联到 StatefulWidget 后立即调用。在此方法中可以进行一次性初始化操作,如设置监听器、初始化异步任务等,但不能直接访问 BuildContext,因为此时 widget 尚未被构建到树中。

    • @override void didChangeDependencies():在 initState() 之后和首次 build() 之前调用。当依赖关系(如 InheritedWidget)发生变化时也会调用。在此方法中可以处理依赖项变更,进行依赖数据的获取或刷新。

    • @override Widget build(BuildContext context):与无状态组件相同,每次需要重新构建 widget 树时都会调用此方法。这里根据 BuildContext 创建并返回 widget 树。

    • @override void setState(VoidCallback fn):调用此方法会标记 State 对象为“dirty”,触发 widget 树重新构建。fn 参数用于封装状态更改逻辑,这些更改将在下一次 build() 调用时生效。

    • @override void didUpdateWidget(Widget oldWidget):当关联的 StatefulWidget 实例发生更改但 State 对象保持不变时调用。可以在这里对比新旧 widget 实例,处理 widget 属性变化带来的影响。

    • @override void deactivate():当 widget 从视图树中暂时移除但其 State 仍可能被恢复时调用。可用于释放不需要的资源,但应避免在此处清理所有状态,因为 widget 可能很快重新激活。

    • @override void dispose():当 widget 从视图树中永久移除且不再需要其 State 时调用。在此方法中释放所有资源(如关闭监听器、取消订阅、清理大型对象等),确保没有内存泄漏。

应用程序(App)的生命周期

Flutter 应用程序的生命周期主要由 main() 函数开始,直到应用程序终止。关键步骤包括:

  1. void main() async { ... }

    • 应用程序的入口点,通常在此处初始化全局变量、设置路由表、初始化第三方库等。
  2. runApp(MyApp())

    • 调用 runApp() 函数将应用程序的根 widget(如 MyApp,通常是一个 MaterialAppWidgetsApp)传递给 Flutter 框架。这标志着应用程序启动,Flutter 开始构建 widget 树并将其渲染到屏幕。
  3. WidgetsAppMaterialApp 生命周期回调

    • 当应用程序启动时,这些高层 widget 会触发各自的生命周期回调方法,如:
      • @override Widget build(BuildContext context):构建应用程序的主界面。
      • 生命周期方法(如 didChangeMetrics, didHaveMemoryPressure, didChangeTextScaleFactor, localeListResolutionCallback, 等):响应系统事件和用户行为,如设备方向变化、内存压力、文本缩放因子更改、语言选择等。
  4. 应用程序暂停与恢复

    • 当用户切换到其他应用或设备进入休眠状态时,Flutter 应用会进入 暂停 状态。此时,框架可能会调用 widget 的 deactivate() 方法,并暂停动画及其他非必要任务以节省资源。
    • 当用户重新回到应用或设备唤醒时,应用会 恢复,框架可能重新调用 build() 方法,同时触发 didChangeDependencies()reassemble()(在热重载后)等方法。
  5. 应用程序终止

    • 当用户主动关闭应用、系统资源紧张强制关闭应用,或者操作系统决定终止应用进程时,整个 Flutter 应用及其所有 widget 的 dispose() 方法会被调用,释放所有资源。此后,应用程序生命周期结束。

综上所述,Flutter 的生命周期管理既包括组件级别的状态变化与资源管理,也涵盖应用程序级别的启动、暂停、恢复与终止过程。理解并恰当利用这些生命周期回调,对于编写高效、健壮且响应迅速的应用程序至关重要。

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值