Flutter检测关闭应用程序

u3r8eeie  于 2023-03-19  发布在  Flutter
关注(0)|答案(1)|浏览(258)

我想知道是否可以检测杀死的应用程序。让我们说在聊天应用程序中,我可以得到时间戳时,用户离开聊天室使用onWillPop。但如果用户杀死了应用程序直接从聊天室,它不会被解雇。那么有没有办法检测到这一点?
或者任何建议,以获得时间戳不同的方式?

w1jd8yoj

w1jd8yoj1#

另请参见https://flutter.io/flutter-for-android/#how-do-i-listen-to-android-activity-lifecycle-events
你可以监听非活动、暂停和断开的状态。这可能有点太早,但通常来说,太早和频繁地做一些清理总比什么都不做好:

  1. WidgetsBinding.instance.addObserver(LifecycleEventHandler(
  2. detachedCallBack: () async => widget.appController.persistState(),
  3. resumeCallBack: () async {
  4. _log.finest('resume...');
  5. }));
  1. class LifecycleEventHandler extends WidgetsBindingObserver {
  2. LifecycleEventHandler({this.resumeCallBack, this.detachedCallBack});
  3. final FutureVoidCallback resumeCallBack;
  4. final FutureVoidCallback detachedCallBack;
  5. // @override
  6. // Future<bool> didPopRoute()
  7. // @override
  8. // void didHaveMemoryPressure()
  9. @override
  10. Future<void> didChangeAppLifecycleState(AppLifecycleState state) async {
  11. switch (state) {
  12. case AppLifecycleState.inactive:
  13. case AppLifecycleState.paused:
  14. case AppLifecycleState.detached:
  15. await detachedCallBack();
  16. break;
  17. case AppLifecycleState.resumed:
  18. await resumeCallBack();
  19. break;
  20. }
  21. _log.finest('''
  22. =============================================================
  23. $state
  24. =============================================================
  25. ''');
  26. }
  27. // @override
  28. // void didChangeLocale(Locale locale)
  29. // @override
  30. // void didChangeTextScaleFactor()
  31. // @override
  32. // void didChangeMetrics();
  33. // @override
  34. // Future<bool> didPushRoute(String route)
  35. }

编辑

在2019年11月4日的pull request中,枚举AppLifecycleState.suspending被重命名为AppLifecycleState.detached。如果您使用的Flutter版本早于1.12,您必须仍然使用AppLifecycleState.suspending

展开查看全部

相关问题