Flutter检测杀死该应用程序 [英] Flutter detect killing off the app
问题描述
我想知道是否有可能查杀该应用程序.
假设在聊天应用中,当用户离开聊天室时,使用onWillPop可以获取时间戳.
但是,如果用户直接从聊天室中杀死了该应用程序,则该应用程序不会被解雇.那么有没有办法检测到呢?
或有任何建议以其他方式获得时间戳记?
I would like to know whether detect killing off the app is possible or not.
Let’s say in a chat app, I was able to get timestamp when user leaves the chat room by using onWillPop.
But if user killed off the app directly from the chat room, it won’t be fired off. So is there a way to detect that?
Or any suggestions to get timestamp different way?
推荐答案
另请参见您可以收听不活动,已暂停和已分离的内容. 这可能为时过早,但通常最好是过早且频繁地进行一些清理,而不是根本不做:
You can listen for inactive, paused, and detached. This might be a bit too early but usually it's better to do some cleanup a bit too early and too often than not at all:
WidgetsBinding.instance.addObserver(LifecycleEventHandler(
detachedCallBack: () async => widget.appController.persistState(),
resumeCallBack: () async {
_log.finest('resume...');
}));
class LifecycleEventHandler extends WidgetsBindingObserver {
LifecycleEventHandler({this.resumeCallBack, this.detachedCallBack});
final FutureVoidCallback resumeCallBack;
final FutureVoidCallback detachedCallBack;
// @override
// Future<bool> didPopRoute()
// @override
// void didHaveMemoryPressure()
@override
Future<void> didChangeAppLifecycleState(AppLifecycleState state) async {
switch (state) {
case AppLifecycleState.inactive:
case AppLifecycleState.paused:
case AppLifecycleState.detached:
await detachedCallBack();
break;
case AppLifecycleState.resumed:
await resumeCallBack();
break;
}
_log.finest('''
=============================================================
$state
=============================================================
''');
}
// @override
// void didChangeLocale(Locale locale)
// @override
// void didChangeTextScaleFactor()
// @override
// void didChangeMetrics();
// @override
// Future<bool> didPushRoute(String route)
}
修改
2019年11月4日,有了这个拉取请求,枚举AppLifecycleState.suspending
被重命名了到AppLifecycleState.detached
.如果您使用的Flutter版本低于1.12,则仍必须使用AppLifecycleState.suspending
.
With this pull request on 4th November 2019, the enum AppLifecycleState.suspending
was renamed to AppLifecycleState.detached
. If you are using Flutter with a version prior to 1.12, you must still use AppLifecycleState.suspending
.
这篇关于Flutter检测杀死该应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!