안드로이드 액티비티 생명주기| Android Basic Knowledge

hoya·2021년 6월 29일
0

Android Basic Knowledge

목록 보기
1/3
post-thumbnail

😮 생명주기?

액티비티가 생성, 정지, 재생, 종료되는 등 일어나는 상태 변화와 그에 따른 콜백 메소드를 총칭한다.

사용자가 앱을 사용하고, 앱에서 나가고, 앱으로 다시 돌아갈 때 앱의 액티비티는 수명 주기 안에서 서로 다른 상태를 통해 전환된다. 이 때 액티비티는 상태 변화를 알아차릴 수 있는 여러 콜백을 제공한다.

🙋‍♂️ 생명주기가 왜 중요해?

안드로이드 생명주기를 잘 알고 활용한다면 액티비티가 변화할 때 발생하는 문제들을 사전에 방지할 수 있다.

자세한 예시

  1. 사용자가 유튜브를 보다가 다른 앱으로 전환할 때 동영상을 일시 중지하고 네트워크 연결을 종료, 이 후 사용자가 돌아오면 네트워크를 다시 연결하고 사용자가 일시중지한 시점에서 동영상을 다시 시작하게끔 허용해야 한다.

  2. 어떤 프로그램을 다운로드하다가 내가 필요하다고 느끼지 않았을 때 해당 액티비티를 종료했음에도 불구하고, 백그라운드에서는 이를 감지하지 못하고 계속해서 필요없는 자료를 다운로드 하고 있는 문제를 방지해야 한다.

간략한 예시

  1. 앱 전환 시 비정상 종료되는 문제
  2. 앱을 사용하지 않을 때 시스템 리소스가 낭비되는 문제
  3. 앱에서 나갔다 들어올 때 사용자의 상태가 저장되지 않는 문제
  4. 화면을 가로-세로 방향으로 회전할 때 비정상 종료되거나 사용자 상태가 저장되지 않는 문제

위와 같은 문제들의 발생을 생명주기를 활용해 예방할 수 있다.


😎 생명주기의 개념


📢 주의점

블로그를 뒤져보다가 발견한 주의점들을 한 곳에 모아두었다. 잘 알려주신 블로거분께 감사드리며, 원문은 하단의 출처에 첨부하니 자세히 알고 싶다면 해당 블로그를 참고하면 된다.

메인 액티비티에서 디테일 액티비티를 호출했을 때 라이프사이클이 호출되는 순서

[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)
액티비티 생명주기

profile
즐겁게 하자 🤭

0개의 댓글