
기존에 Activity LifeCycle에 대한 글을 적었던 적이 있다. 너무 이론적인 내용이라, 실질적인 내용 위주로 다시 정리해보려고 한다.
먼저, Activity LifeCycle 은 간단하게 얘기하면 Activity는 활동 수명 주기 단계에서 6가지의 콜백 함수들이 호출되며 이루어진다.
콜백- 어떤 이벤트가 발생한 후에 호출하는 함수(메서드)
이번에는 Activity LifeCycle 내에 있는 6가지 콜백 함수들이 실제로 어떤 이벤트가 발생할 때 호출되는 지
Override하여 사용할 때, 어떤 점을 유의해야 하는 지에 대해 알아볼 것이다.
일단 위 사진을 한 흐름으로 설명한다면 이러하다.
액티비티가 실행되었을 때, onCreate , onStart , onResume 이 빠르게, 순차적으로 실행이 된다.
onResume이 실행된 이후에는 사용자에게 화면이 보여지는 것
사용자가 Back 버튼이나 Home 버튼을 눌러, 화면을 벗어날 때, 그 화면 Activity의 onPause 와 onStop 이 순차적으로 호출되는 것.
다시 App으로 돌아가게 되면 onStop 상태에서 onRestart가 호출된다. 그리고 onStart와 onResume이 호출되며 사용자에게 화면이 보여지는 것이다.
하지만, 실행 중인 App 목록에서 완전히 제거되거나 시간이 오래지나 제거되었을 때 에는? onDestroy가 호출되는 것.
완전히 kill된 이후에, 다시 호출될 때는 onCreate부터 다시 호출된다.
이러한 Activity LifeCycle 에서 가장 중요한 것 ?
"적시에 알맞은 처리를 하는 것"
onCreate - Activity가 생성되고 최초 한 번 호출되는 콜백이므로, 최초 한 번만 호출되는 코드를 작성하는 것이 좋다.
Layout Inflate or 데이터를 초기화하는 과정.onStart - 한 번 호출되었다가, onRestart를 호출하고 다시 되돌아왔을 때, 한 번 더 호출 될 수 있으므로
애니메이션의 실행 or 데이터를 갱신 하는 과정들을 실행하는 것이 좋다.onResume - 이 Activity가 화면에서 보여지고 있다는 것을 의미. "Activity가 Focus를 얻었다."
Focus를 얻었을 때, 반드시 처리해야 하는 작업을 onResume에서 처리해주는 것이 좋다.onPause - onResume과 반대로, "Activity가 Focus를 잃었다."
onResume과 onPause는 마찬가지로 자주 호출될 수 있기 때문에, 너무 오래걸리는 연산을 여기에서 수행하는 것은 좋지 않다.onStop - onStart와 대응해서 생각하자. 이 Activity를 종료하고 다른 App을 사용하고 있는 경우라고 생각하자.
애니메이션 중단 or 데이터 갱신 처리 중단onDestroy - 아예 메모리에서 정리하는 단계.
onStop에서 정리하지 못한 작업을 마저 수행하는 것이 좋다.
와 너무 유익해요!