赞
踩
在软件开发过程中,无论是Android开发还是IOS开发中都有生命周期的概念,比如Android中Activity的生命周期,Fragment的生命周期,iOS中的ViewController也存在生命周期。Flutter中的Widget也存在生命周期,并且是通过State体现的。
在Flutter中存在两种生命周期,一个是页面Widget,另一个是App。
Flutter宇宙中,一切都是Widget.
通常是指StatefulWidget这个Widget的生命周期,先看一下流程图。
如上图所示,State生命周期分为三部分:初始化, 更新,销毁,下面依次说明各个阶段的工作。
在开发中,有时需要根据App的状态来做一些业务处理,Flutter开发中,我们利用WidgetsBindingObserver类来实现监听App的生命周期。
WidgetsBindingObserver中提供了非常丰富的回调函数,比如屏幕旋转,屏幕亮度,语言变化,内存警告等。通过WidgetsBinding单例对象设置监听器,就可以获取相应的回调方法。
通过didChangeAppLifecycleState就可以获取APP生命周期的回调,使用方法如下代码所示:
class _Page1State extends State<Page1> with WidgetsBindingObserver { //当Widget第一次插入到Widget树时会被调用,对于每一个state对象,Flutter只会调用改回调一次 @override void initState() { // TODO: implement initState super.initState(); WidgetsBinding.instance.addObserver(this); WidgetsBinding.instance.addPostFrameCallback((timeStamp) { print("单次Frame绘制回调"); // 只调用一次 }); WidgetsBinding.instance.addPersistentFrameCallback((timeStamp) { print("实时Frame绘制回到"); // 每帧都回调,可以用来统计FPS }); } ... // 当state对象被永久移除时调用; 通常在此方法中释放资源 @override void dispose() { // TODO: implement dispose super.dispose(); WidgetsBinding.instance.removeObserver(this); } @override void didChangeAppLifecycleState(AppLifecycleState state) { // TODO: implement didChangeAppLifecycleState print("Page1 Lifecycle:, ${state.toString()}"); if (state == AppLifecycleState.resumed) {} super.didChangeAppLifecycleState(state); } }
didChangeAppLifecycleState 回调函数中,有一个参数类型为 AppLifecycleState 的枚举类,这个枚举类是 Flutter 对 App 生命周期状态的封装。它的常用状态包括 resumed、inactive、paused 这三个。
除了可以监听App的生命周期回调,还可以用来在组件渲染后进行一下其他操作,比如上述代码中通过addPostFrameCallback监听单次绘制回调,通过addPersistentFrameCallback获取帧的实时回调,可以用来做FPS检测。
觉得文章不错的,给我点个赞哇,关注一下呗!
技术交流可关注公众号【君伟说】,加我好友一起探讨
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。