关于AppLifecycleState检测应用程序存在的状态(前后台监听)
概念
一个应用程序存在的状态
下面的值描述来自操作系统的通知
应用程序不应该总是期望收到所有可能的通知
例如,如果用户从设备中取出电池,在应用程序和操作系统的其他部分突然终止之前,不会发送任何通知
enum AppLifecycleState {
//应用程序是可见的,并且响应用户输入
resumed,
/// 应用程序处于非活动状态,没有接收用户输入
/// On iOS
/// 在Android上,这对应于一个应用程序或Flutter主机视图运行在前台非活动状态
/// 当其他活动被关注时,应用程序会过渡到这种状态,比如分屏应用程序、电话呼叫、画中画应用程序、 /// 系统对话框或另一个窗口
///处于这种状态的应用程序应该假设它们可能在任何时候pause.
inactive,
/// 应用程序当前对用户不可见,不响应用户输入,并在后台运行。当应用程序处于这种状态时,引擎将不 ///会调用Window.onBeginFrame和Window.onDrawFrame回调。
paused,
///应用程序仍然驻留在Flutter引擎上,但是与任何主机视图分离。
///当应用程序处于这种状态时,引擎在没有视图的情况下运行。当引擎第一次初始化时,它可以处于 ///attaching a view 的过程中或在由于 Navigator pop,view被销毁之后。
detached,
}
void main() {
// Enable integration testing with the Flutter Driver extension.
// See https://flutter.io/testing/ for more info.
runApp(new MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => new _MyAppState();
}
class _MyAppState extends State<MyApp>
with WidgetsBindingObserver{
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
print("--" + state.toString());
switch (state) {
//切换前台时,可回调,初始化时,收不到回调
case AppLifecycleState.resumed:
break;
//切换后台时,inactive,pause先后回调
case AppLifecycleState.inactive:
break;
case AppLifecycleState.paused:
break;
case AppLifecycleState.detached:
break;
}
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
appBar: new AppBar(
title: const Text('前后台测试')
),
body: Container(
color: Colors.black,
child: Text('前后台测试'),
),
),
);
}
}