Activity 라이프사이클 맛보기 정리
우연치 않은 기회에 다시 안드로이드를 손댈 일이 있어서 개발 하다가 알고 넘어 가야 할 기본지식이 있어서 기록한다.
프로세스가 돌고 돌아서 종료가 될때까지 메모리 관리 및 여러가지가 있겠지만 자바와 크게 다르게 본다면
액티비티 (Activity)의 생명주기(Life Cycle) 를 알면 될것 같다.
안드로이드에서는 각각의 화면에 대한 개념을 액티비티라고 정의 하고 각 화면마다 라이프 세이클이 진행이 된다.
프래그먼트(Fragment)라는 녀석도 있지만, 어플리케이션이 기본적으로 동작하기 위해선 무조건 하나이상의 액티비티가 있어야한다. 이 프래그먼트라는 녀석은 결국 액티비티위에서 자신의 생명이 좌지우지 되기때문에 프래그먼트의 생명주기가 어플리케이션의 생명주기라고 볼 수 없고, 액티비티의 생명주기가 더 맞다고 볼 수 있다.
따라서 하나의 액티비티가 어떻게 시작이 되고 어떻게 동작하다가 어떻게 종료 되는지를 알게 되면 안드로이드라는 큰 숲이 보여지게 될것이다.
*왼쪽에서 부터 시작하여 상황별 case 에 따른 라이프 사이클정보를 쉽게 확인할수 있기에 어디서인가 따온 이미지
1. onCreate()
Activity가 처음 만들어질 때 호출되는 함수이면서, 어플리케이션이 처음 시작할 때 최초로 한번 실행되는 함수이다. 주로 view를 만들거나 view resource bind , data to list 등을 onCreate()에서 담당하며, 이전 상태의 정보를 담고있는 Bundle을 제공한다.
2. onStart()
Activity가 다시 시작되기 전에 호출, Actvitiy가 멈춘 후 호출되는 함수, Activity가 사용자에게 보여지기 직전에 호출되는 함수
3. onResume()
Activity가 비로소 화면에 보여지는 단계, 사용자에게 Focus를 잡은 상태
3-1 onRestart()
Activity가 멈춰있다가 다시 호출될 때 불리는 함수, 즉 Stopped상태였을 때 다시 호출되어 시작될 때 불린다.
4. onPause()
Activity위에 다른 Activity가 올라와서 focus를 잃었을 때 호출되는 함수.
완전 Activity가 가려지지 않은 상태에서 호출되는 함수.
즉 일부분이 보이거나 투명상태일 경우 호출된다.
다른 Activity가 호출되기 전에 실행되기 때문에 onPause()함수에서 시간이 많이 소요되는 작업이나,
많은 일을 처리하면, 다른 Activity가 호출되는 시간이 지연되기 때문에 많은 일을 처리하지 않도록 주의하자.
영구적인 data는 여기서 저장한다.
5. onStop()
Activity위에 다른 Activity가 완전히 올라와 화면에서 100% 가려질 때 호출되는 함수. 홈키를 누르는 경우.
또는 다른 액티비티페이지 이동이 있는 경우. 만약 이상태에서 Activity가 다시 불려지면, onRestart()함수가 호출된다.
6. onDestroy()
Activity가 완전히 스택에서 없어질 때 호출되는 함수, 즉 제거되는 경우.
finish() 메소드가 호출되거나, 시스템 메모리 확보를 위해 호출된다.
*onStop(), onDestroy() 함수는 호출되지 않을 수 있음. (메모리 부족이나 여타 사항으로 프로세스가 죽어버리는 상황)