파파비의 블로그
플러터, flutter) App의 LifeCycle 본문
inactive ; 실행이 되고 있지도 않은 상태를 의미해서 paused되기 전, detached가 실행되기전에 이 상태로 먼저 변함
(참고로 inactive는 예전에 paused > resume으로 돌아갈 때도 잠깐 변경 됐었지만 지금은 그렇지 않음).
paused ; 시각적으로 보이지는 않지만 background에서는 돌아가고 있는 상태
resumed ; paused에서 돌아온 상태, 다시 보이기 시작하며 user input도 받을 수 있는 상태
detached ; 앱이 꺼지기 직전에 실행되는 것.
- (정확히는 The application is still hosted on a flutter engine but is detached from any host views.)
특히 suspending은 os에 의해 정상적으로 꺼지는 것이 아니라 배터리가 사라지거나 배터리를 빼는 등의
강제적인 종료에 의해서는 listener가 실행되지 않을 수 있음.
심지어 그냥 앱을 백드라운드에서 스와이프로 꺼도 실행이 안됨
이런 상태에 따른 callback들을 어떻게 감지할 수 있을까?
리스너 설정을 어떻게 할까?
1. 먼저 WidgetsBindingObserver mixin을 원하는 위젯에 추가해준다.
예시의 경우는 MyHomePage의 State class에 추가하였다.
2. 리스너 등록을 및 해체 코딩을 등록해준다.
- 등록은 initstate에서 해주는게 편하다.
- 해체는 dispose시에 하도록 한다. 해체 작업을 명령 안해두면 위젯은 사라져도 리스너는 사라지지 않기 때문이다.
등록 및 해체 작업은 WidgetBinding.instance를 통해서 진행할 수 있다.
등록은 addObserver 이며, 해체는 removerObserver이다.
3. WidgetsBindingObserver mixin의 콜백함수( app 상태가 변할때 마다 자동 실행됨 )를 override해준다.
위 코드를 보면 didChangeAppLifecycleState가 콜백함수임을 알 수 있다.
저 메소드는 state가 바뀔 때마다 실행되고
따라서 state의 상태값에 따라 원하는 코드를 넣어주면 된다.
'개발 > flutter' 카테고리의 다른 글
플러터 위젯 및 Tree관련, Deep Dive 링크들 (0) | 2020.05.31 |
---|---|
플러터, flutter) List와 Stateful 위젯을 함께 쓸 때의 Problem(key의 필요성 인식) (0) | 2020.05.28 |
플러터, flutter) Widget의 LifeCycle (0) | 2020.05.28 |
플러터, flutter) Widget Tree의 Build() 관련 최적화 (0) | 2020.05.28 |
플러터, flutter) 플러터 이해하기 - Widget, Element, Render Tree & context (0) | 2020.05.28 |