AppLifecycleState枚举类定义了Flutter生命周期的类型,通过WidgetsBindingObserver来监听AppLifecycleState。AppLifecycleState有四种状态:inactive、paused、reasumed、detached(以前还有个suspending,已过期)
它们与Android和IOS的生命周期对应关系如下表:
状态 | 说明 | Android | iOS |
---|---|---|---|
inactive | 界面退到后台或弹出对话框情况下, 即失去了焦点但仍可以执行drawframe回调 | onPaus | viewDidLoad |
paused | 应用挂起,比如退到后台,失去了焦点且不会收到drawframe回调 | onStop | viewWillDisappear viewDidDisappear |
resumed | 从后台切换前台,界面可见 | onResume | viewWillAppear viewDidAppear |
detached | APP结束时调用 | onDestroy | dealloc |
通过sample实际测试一下生命周期的回调时机
class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
AppLifecycleState _state;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
print('state = $state');
}
APP启动
无事件发生
屏幕旋转
无事件发生
APP结束
I/flutter (13730): state = AppLifecycleState.inactive
I/flutter (13730): state = AppLifecycleState.paused
I/flutter (13730): state = AppLifecycleState.detached
点击HOME键
I/flutter (13730): state = AppLifecycleState.inactive
I/flutter (13730): state = AppLifecycleState.paused
关屏幕
I/flutter (15366): state = AppLifecycleState.inactive
I/flutter (15366): state = AppLifecycleState.paused