我有一个要在AppLifeCycleState
为.paused
时完全重启的应用程序
这似乎在android (Pixel 3 XL Api 28)
上有效,但不适用于iOS设备。
在我的本机iOS版本上,我在AppDelegate的applicationDidEnterBackground函数中运行了exit(0)。
我尝试使用WidgetBindingObserver
使MyApp成为有状态的,并监听状态的变化。在.paused状态下,我尝试执行exit(0)
和SystemChannels.platform.invokeMethod<void>('SystemNavigator.pop');
在MyApp的状态内
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
super.dispose();
WidgetsBinding.instance.removeObserver(this);
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
switch (state) {
case AppLifecycleState.paused:
print('paused state');
SystemChannels.platform.invokeMethod<void>('SystemNavigator.pop');
//I have also tried exit(0); here.
break;
case AppLifecycleState.resumed:
print('resumed state');
break;
case AppLifecycleState.inactive:
print('inactive state');
break;
case AppLifecycleState.suspending:
print('suspending state');
break;
}
}
我希望该应用程序将退出,然后再次打开将重新启动,但它根本不会退出。它只是恢复进入暂停状态之前的位置。此行为仅在iOS设备上。
我了解我的代码不是一个完全正常的最小示例-如果您需要我设置示例供人们尝试,请告诉我。
答案 0 :(得分:0)
好的,所以我已经解决了这个问题,但是我不确定100%为什么以前使用exit(0)
的尝试不起作用。
我将didChangeAppLifecycleState
函数更改为以下内容。
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
switch (state) {
case AppLifecycleState.paused:
print('paused state');
SystemChannels.platform.invokeMethod<void>('SystemNavigator.pop');
if (Platform.isIOS) {
exit(0);
}
break;
case AppLifecycleState.resumed:
print('resumed state');
break;
case AppLifecycleState.inactive:
print('inactive state');
break;
case AppLifecycleState.suspending:
print('suspending state');
break;
}
}
通过添加以下代码,该应用现在可以在android和iOS上退出。
if (Platform.isIOS) {
exit(0);
}
如果任何人都能阐明为什么仅靠自己使用exit(0)
还是行不通的,我希望能更好地理解这一点。