AppLifecycleState

하상현·2024년 4월 23일
1

위젯의 생명주기(Lifecycle)가 아닌, 앱이 실행된 후 사용자의 행동에 따라 변하는 앱의 상태
모바일 앱이나 다른 소프트웨어 앱이 실행되는 동안 어떤상태에 있는지를 나타낸다.

5가지의 상태

resumed:

- 앱이 표시되고 사용자 입력에 응답합니다
- 최초 앱 실행때는 해당 이벤트가 발생하지 않습니다.

inactive:

- 앱이 비활성화 상태이고 사용자의 입력을 받지 않습니다

detached:

- 모든 뷰가 제거되고 플러터 엔진만 동작 중이며 앱이 종료되기 직전에 실행됩니다

paused:

- 앱이 현재 사용자에게 보이지 않고, 사용자의 입력을 받지 않으며, 백그라운드에서도 동작하지 않습니다

hidden:

- 앱의 화면이 숨겨지지만, 앱이 계속 실행되고있으며 백그라운드에서 작업을 수행할 수 있습니다

플러터에서 앱상태확인하기

import 'package:flutter/material.dart';

class ExamplePage extends StatefulWidget {
  const ExamplePage({Key? key}) : super(key: key);

  
  State<ExamplePage> createState() => _ExamplePageState();
}

class _ExamplePageState extends State<ExamplePage> with WidgetsBindingObserver {
  
  void didChangeAppLifecycleState(AppLifecycleState state) {
    switch (state) {
      case AppLifecycleState.resumed:
        // 앱이 표시되고 사용자 입력에 응답합니다
        // 주의! 최초 앱 실행때는 해당 이벤트가 발생하지 않습니다.
        print("resumed");
        break;
      case AppLifecycleState.inactive:
        // 앱이 비활성화 상태이고 사용자의 입력을 받지 않습니다
        print("inactive");
        break;
      case AppLifecycleState.detached:
        // 모든 뷰가 제거되고 플러터 엔진만 동작 중이며 앱이 종료되기 직전에 실행됩니다
        print("detached");
        break;
      case AppLifecycleState.paused:
        // 앱이 현재 사용자에게 보이지 않고, 사용자의 입력을 받지 않으며, 백그라운드에서도 동작하지 않습니다
        print("paused");
        break;
      case AppLifecycleState.hidden:
        // 앱의 화면이 숨겨지지만, 앱이 계속 실행되고있으며 백그라운드에서 작업을 수행할 수 있습니다
        print("hidden");
    }
  }

  
  void initState() {
    super.initState();

    WidgetsBinding.instance.addObserver(this);
  }

  
  void dispose() {
    super.dispose();

    WidgetsBinding.instance.removeObserver(this);
  }

  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(child: Text('실행화면')),
    );
  }
}

앱 실행후 Overview화면으로 이동

Overview화면에서 다시 앱 실행화면으로

Home을 눌렀을 때

실행화면에서 back을 눌러 완전히 어플을 종료했을때

0개의 댓글