KxFlutter
  • 写在前面
  • Dart
  • 框架源码
    • flutter_bloc
  • Widget
    • 渲染流程
    • 生命周期
      • App
      • State(ful Widget)
  • 系统原理
    • MethodChannel
    • 系统架构
由 GitBook 提供支持
在本页
  • WidgetsBindingObserver
  • 生命周期回调
  • 帧绘制回调
  • 相关链接

这有帮助吗?

  1. Widget
  2. 生命周期

App

WidgetsBindingObserver

abstract class WidgetsBindingObserver {
  //页面pop
  Future<bool> didPopRoute() => Future<bool>.value(false);
  //页面push
  Future<bool> didPushRoute(String route) => Future<bool>.value(false);
  //系统窗口相关改变回调,如旋转
  void didChangeMetrics() { }
  //文本缩放系数变化
  void didChangeTextScaleFactor() { }
  //系统亮度变化
  void didChangePlatformBrightness() { }
  //本地化语言变化
  void didChangeLocales(List<Locale> locale) { }
  //App生命周期变化
  void didChangeAppLifecycleState(AppLifecycleState state) { }
  //内存警告回调
  void didHaveMemoryPressure() { }
  //Accessibility相关特性回调
  void didChangeAccessibilityFeatures() {}
}

生命周期回调

didChangeAppLifecycleState 回调函数中,有一个参数类型为 AppLifecycleState 的枚举类,这个枚举类是 Flutter 对 App 生命周期状态的封装。它的常用状态包括 resumed、inactive、paused 这三个。

  • resumed:可见的,并能响应用户的输入。

  • inactive:处在不活动状态,无法处理用户响应。

  • paused:不可见并不能响应用户的输入,但是在后台继续活动中。

帧绘制回调

WidgetsBinding 提供了单次 Frame 绘制回调,以及实时 Frame 绘制回调两种机制,来分别满足不同的需求:

  • 单次 Frame 绘制回调,通过 addPostFrameCallback 实现。它会在当前 Frame 绘制完成后进行进行回调,并且只会回调一次,如果要再次监听则需要再设置一次。

WidgetsBinding.instance.addPostFrameCallback((_){
    print("单次Frame绘制回调");//只回调一次
  });
  • 实时 Frame 绘制回调,则通过 addPersistentFrameCallback 实现。这个函数会在每次绘制 Frame 结束后进行回调,可以用做 FPS 监测、卡顿检测。

WidgetsBinding.instance.addPersistentFrameCallback((_){
  print("实时Frame绘制回调");//每帧都回调
});

相关链接

上一页生命周期下一页State(ful Widget)

最后更新于5年前

这有帮助吗?

可以通过 and 来添加或者移除监听。

WidgetsBinding.addObserver
WidgetsBinding.removeObserver
Flutter核心技术与实战:11 | 提到生命周期,我们是在说什么?
WidgetsBindingObserver class
切换前后台应用状态变化情况