개발노트

43. [Flutter] 앱 생명주기 (with WidgetsBindingObserver) 본문

앱 개발/Flutter

43. [Flutter] 앱 생명주기 (with WidgetsBindingObserver)

mroh1226 2023. 11. 8. 10:42
반응형

Flutter LifeCycle 이용하기

Flutter 애플리케이션의 Life Cycle(생명주기)은 애플리케이션이 시작되고 종료될 때 다양한 이벤트와 상태 변화를 관리하는 중요한 부분입니다.

 

Flutter 애플리케이션의 라이프사이클은 다음과 같은 주요 단계로 나눌 수 있습니다:

  • resumed:
    애플리케이션이 활성화된 상태입니다.
    사용자가 앱을 화면에 보고 상호작용하는 상태입니다.
  • inactive:
    애플리케이션이 비활성화된 상태입니다.
    다른 앱으로 전환하거나 홈 버튼을 누른 경우 앱이 이 상태로 전환됩니다.
  • paused:
    애플리케이션이 일시정지된 상태입니다.
    전화가 오거나 다른 중요 이벤트로 앱이 일시정지될 때 발생합니다.
  • detached:
    애플리케이션이 분리된 상태입니다.
    이 상태는 애플리케이션이 완전히 종료되었을 때 발생하며, 앱이 백그라운드에서 실행되지 않을 때 나타납니다.

이러한 라이프사이클 상태는 WidgetsBindingObserver 인터페이스를 구현하여 감지하고 처리할 수 있습니다. 예를 들어, didChangeAppLifecycleState 메서드를 사용하여 애플리케이션 라이프사이클 상태 변화를 처리할 수 있습니다.

다음은 WidgetsBindingObserver를 사용하여 애플리케이션 라이프사이클 상태를 처리하는 예제 코드입니다:

 

import 'package:flutter/widgets.dart';

class MyAppState extends State<MyApp> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      // 애플리케이션이 활성화된 상태
    } else if (state == AppLifecycleState.inactive) {
      // 애플리케이션이 비활성화된 상태
    } else if (state == AppLifecycleState.paused) {
      // 애플리케이션이 일시정지된 상태
    } else if (state == AppLifecycleState.detached) {
      // 애플리케이션이 분리된 상태
    }
  }

  @override
  Widget build(BuildContext context) {
    // 앱 UI 빌드
  }
}
  • WidgetsBindingObserver 를 with 문과 함께 사용하여 didChangeAppLifecycleState() 메소드를 override 합니다.
  • didChangeAppLifecycleState() 안에 생명주기를 이용하여 inactive 상태일 때 controller들을 dispose() 했다가 resumed 상태일 때 initialize() 할 수 있습니다.
반응형
Comments