액티비티가 생성, 정지, 재생, 종료되는 등 일어나는 상태 변화와 그에 따른 콜백 메소드를 총칭한다.
사용자가 앱을 사용하고, 앱에서 나가고, 앱으로 다시 돌아갈 때 앱의 액티비티는 수명 주기 안에서 서로 다른 상태를 통해 전환된다. 이 때 액티비티는 상태 변화를 알아차릴 수 있는 여러 콜백을 제공한다.
안드로이드 생명주기를 잘 알고 활용한다면 액티비티가 변화할 때 발생하는 문제들을 사전에 방지할 수 있다.
자세한 예시
사용자가 유튜브를 보다가 다른 앱으로 전환할 때 동영상을 일시 중지하고 네트워크 연결을 종료, 이 후 사용자가 돌아오면 네트워크를 다시 연결하고 사용자가 일시중지한 시점에서 동영상을 다시 시작하게끔 허용해야 한다.
어떤 프로그램을 다운로드하다가 내가 필요하다고 느끼지 않았을 때 해당 액티비티를 종료했음에도 불구하고, 백그라운드에서는 이를 감지하지 못하고 계속해서 필요없는 자료를 다운로드 하고 있는 문제를 방지해야 한다.
간략한 예시
위와 같은 문제들의 발생을 생명주기를 활용해 예방할 수 있다.
블로그를 뒤져보다가 발견한 주의점들을 한 곳에 모아두었다. 잘 알려주신 블로거분께 감사드리며, 원문은 하단의 출처에 첨부하니 자세히 알고 싶다면 해당 블로그를 참고하면 된다.
메인 액티비티에서 디테일 액티비티를 호출했을 때 라이프사이클이 호출되는 순서
[MainActivity]onPause()
[DetailActivity]onCreate()
[DetailActivity]onStart()
[DetailActivity]onResume()
[MainActivity]onStop()
메인 액티비티의 onStop()
이 디테일 액티비티의 라이프사이클이 끝나야 호출되는 것에 주의하자.
디테일 액티비티에서 메인 액티비티로 돌아갈 때 디테일 액티비티 종료 후 라이프사이클이 호출되는 순서
[DetailActivity]onPause()
[MainActivity]onRestart()
[MainActivity]onStart()
[MainActivity]onResume()
[DetailActivity]onStop()
[DetailActivity]onDestroy()
디테일 액티비티가 종료된 후 메인 액티비티의 라이프사이클이 호출되는 것이 아니라, 디테일 액티비티가 멈추고 메인 액티비티의 라이프사이클이 호출 된 후 디테일 액티비티가 완전히 종료된다.
불투명한 새 액티비티가 최상단으로 올라올 때
불투명 새로운 액티비티가 최상단으로 올라오면 기존 액티비티는 사용자와 더 이상 상호작용을 할 수 없기 때문에, onPause()
에 이어 onStop()
까지 바로 호출된다.
onPause()
까지만 호출된 상태를 확인하고 싶다면 투명한 새 액티비티를 실행해야 한다. 스타일 속성이 투명하다고 선언이 되어있다면 해당 액티비티는 투명 액티비티라고 간주하고 onPause()
까지만 호출된다. 하지만 실제 실행 시 백그라운드 색상이 투명한 것은 아니기 때문에 불투명하게 보이게 된다.
안드로이드 생명주기는 안드로이드 개발자라면 필수로 알고있어야 하는 문제이다. 다음에는 액티비티 생명주기를 넘어, 프래그먼트 생명주기에 대해서도 자세히 알아보도록 하자.
참고 및 출처
안드로이드 공식 개발자 사이트
내 맘대로 정리한 안드로이드
안드로이드 액티비티 생명주기 (주의점 3)
나는 라이프사이클을 글로 배웠어요 (주의점 1,2)
액티비티 생명주기