Android/이론 학습

[Android] Activity 의 Life cycle 과 App Life cycle 을 연관지어 생각해보기

노소래 2022. 2. 10. 17:24

본 글은 아래 링크에서 이어지는 글입니다.

 

[Android] 안드로이드의 Processes 와 App Life-cycle

안드로이드 프로세스 관리 기본원리 안드로이드 어플리케이션은 리눅스 프로세스 상에서 동작한다. 프로세스는 앱의 코드가 실행되어야할 때 만들어지고, 더이상 필요하지 않거나 시스템이 다

nosorae.tistory.com


[Activity 소개]

  • 안드로이드 앱의 중요한 컴포넌트 중 하나로 유저와 소통하기 위한 시작점이 되어준다.
  •  UI 를 그리기 위한 window 를 제공한다.

[Activity 관점]

  • 액티비티의 생명주기를 단순 나열하면 다음과 같다.
    (onCreate - onStart - onResume - onPause - onStop - onDestroy)
  • 위 process 종류 섹션에서 알아봤듯이, 액티비티의 상태에 따라 시스템이 주어진 프로세스를 삭제할 가능성이 결정된다.
  • onResume 부터 onPause 전까지 즉 화면에 전체가 다 보이면 foreground process
  • onPause 부터 onStop 전까지 visible process
  • onStop 부터 cached process
  • 정리하자면 시스템이 내 앱의 프로세스를 죽이는지 여부는 프로세스 상태에 달려있는데, 프로세스 상태는 액티비티 상태에 달려있다는 것이다. 그래서 액티비티 라이프 사이클이 중요한 것!
  • 액티비티 상태 -> 프로세스 상태 -> 앱 프로세스 제거

[Activity 생명주기 관련 callback]

시스템이 액티비티를 만들고 멈추고 다시작하거나 액티비티가 붙어있는 프로세스를 파괴하는 등의 변화를 액티비티가 알게하기 위해 아래와 같은 콜백이 액티비티에 존재

Android Developers

  • onCreate
    시스템이 액티비티 만듦 전 액티비티 생명주기 중에 딱 한 번만 호출됨
    여기서 필요한 변수들 초기화 Bundle 활용 (액티비티가 존재한 적이 없다면 null)
    setContentView 호출 (액티비티에 보여줄 layout 정의)
  • onStart
    액티비티가 유저에게 보이기 시작 액티비티가 최전면에 나와 유저와 상호작용할 최종 준비포함 
  • onResume
    액티비티가 유저와 상호작용 시작
    액티비티가 액티비티 스택 최상단에 있는 시점 포커스를 잃기 전에는 이 상태 유지 포커스를 잃으면 pause 상태가 되기 때문에 resume 에서 pause 에 해제한 리소스를 복구하는 코드 작성
  • onPause
    액티비티가 포커스를 잃고 일부가 가려졌을 때 유저가 액티비티를 떠난 거나 완전히 가려지면 onPause
    이후 바로 onStop 으로 이어짐 물론 그렇지 않다면 onPause 상태에 머무름
    그러나 여기서 무거운 IO 작업 하지말 것 (ex 네트워크 통신, DB 트랜잭션)
  • onStop
    액티비티가 유저에게 더이상 보이지 않게 될 때 호출됨(by 파괴, 새 액티비티 시작 ...)
    메모리에는 아직 존재(즉 아직 각 View 의 현재상태를 시스템이 아직 가지고 있다는 말인듯 하다)
    하지만 window manager 에 붙어있지 않은 상태
    여기서 현재 액티비티로 다시 돌아온다면 onRestart 호출 그렇지 않고 완전히 종료된다면 onDestroy 호출
  • onRestart
    액티비티가 stop 상태가되었다가 다시 시작될 때 호출되는데
    이 때 stop 될 때의 액티비티 상태를 회복 항상 onStart 가 뒤따름
  • onDestroy
    액티비티가 파괴되기 전에 호출
    onPause, onStop 에서 해제하지 않은 리소스를 여기서 해제
  • onSaveInstanceState 에서 상태 저장, superclass 의 이 메소드는 view hierarchy 저장
  • onRestoreInstanceState 에서 복구 (이곳의 Bundle 이 onCreate 의 Bundle 과 같다.)

이제 공식문서의 이 표가 이해가 될 것이다.

Android Developers

 

 

[출처] Android Developers