파파비의 블로그

플러터, flutter) App의 LifeCycle 본문

개발/flutter

플러터, flutter) App의 LifeCycle

N. Dave 2020. 5. 28. 11:05
반응형

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의 상태값에 따라 원하는 코드를 넣어주면 된다.

반응형
Comments