Flutter与Native生命周期对比

AppLifecycleState枚举类定义了Flutter生命周期的类型,通过WidgetsBindingObserver来监听AppLifecycleState。AppLifecycleState有四种状态:inactivepausedreasumeddetached(以前还有个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

 

发布了116 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/vitaviva/article/details/105264434