State 生命周期

App 生命周期
abstract class WidgetsBindingObserver {//页面popFuture<bool> didPopRoute() => Future<bool>.value(false);//页面pushFuture<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:不可见并不能响应用户的输入,但是在后台继续活动中。
class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver{//这里你可以再回顾下,第7篇文章“函数、类与运算符:Dart是如何处理信息的?”中关于Mixin的内容...@override@mustCallSupervoid initState() {super.initState();WidgetsBinding.instance.addObserver(this);//注册监听器}@override@mustCallSupervoid dispose(){super.dispose();WidgetsBinding.instance.removeObserver(this);//移除监听器}@overridevoid didChangeAppLifecycleState(AppLifecycleState state) async {print("$state");if (state == AppLifecycleState.resumed) {//do sth}}}
- 从后台切入前台,控制台打印的 App 生命周期变化如下: AppLifecycleState.paused->AppLifecycleState.inactive->AppLifecycleState.resumed;
- 从前台退回后台,控制台打印的 App 生命周期变化则变成了:AppLifecycleState.resumed->AppLifecycleState.inactive->AppLifecycleState.paused。

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

