[android] 액티비티의 생명주기

이아름·2022년 10월 6일
0

안드로이드

목록 보기
4/13
post-thumbnail

What is Activity?

  • 4대 컴포넌트 중 하나로 사용자에게 화면을 제공하는 앱 컴포넌트
    -> Activity는 Manifest 파일에 선언되야 함
    -> AppCompatActivity를 상속받고 onCreate() 메서드를 override하면 생성할 수 있음

What is LifeCycle?

  • Activity는 메모리에 상주되면서 소멸되기까지의 생명주기(LifeCycle)를 가짐
    -> onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy(), onRestart() 총 7개가 있음

  • 가운데 초록색 상태가 activity가 실행되고 있는 상태이다.

onCreate()

  • onCreate는 activity가 생성될 때 호출되고 onDestory()는 activity가 완전히 종료될때 호출된다.
  • 주로 View를 만드는 작업을 수행한다. (UI 초기화)

onStart()

  • 주로 onStop과 짝을 지어 사용된다.
    -> onStart에서 켜주고 onStop에서 꺼주는 작업을 함

  • 네트워크와 같은 작업은 onStart에서 하는 것을 권장한다.
    <- background에 갔다가 와도 다시 호출되기 때문

onResume

  • 이 시점에서 Activity는 Stack의 최상단에 있게 된다.
  • onPause와 짝을 이뤄 사용한다.

onPause

  • Activity가 비활성화 되었을 때 호출된다.
  • 오래 걸리는 작업은 지양해야 한다.

onStop

  • activity가 더이상 보여지지 않을 때 호출된다.

  • 완전한 소멸상태는 아니다.

  • 만약 Activity 사용중에 홈키를 누르면 onPause() -> onStop()이 실행된다.
    다시 해당 액티비티를 호출하면 onRestart() -> onStart()가 호출된다.

onDestroy

  • 애플리케이션을 완전히 종료 했을 경우 호출한다.
  • destroy된 상태에서 다시 애플리케이션을 실행하면 onCreate부터 다시 시작한다.
  • finish가 호출되거나 시스템(메모리 확보를 위해)이 Activity를 제거할 때 호출한다.

  • 안드로이드에서 가장 우선순위가 높은 앱은 전화이다.
    -> 다른 앱 실행 중일 때 전화가 오면 현재 앱을 중지하고 전화 앱을 실행한다.

  • MainActivity에서 SubActivity를 호출했을 때
    [MainActivity] onPause -> [SubActivity] onCreate, onStart, onResume -> [MainActivity] onStop
    -> MainActivity는 Pause만 하고 Sub를 생성한다.

  • 뒤로가기를 누를 경우
    [SubActivity] onPause -> [MainActivity] onRestart, onStart, onResume ->[SubActivity] onStop, onDestroy

화면 회전시

  • 화면을 회전하면 Destroy했다가 다시 생성됨
    onPause -> onStop -> onDestroy(종료) -> onCreate -> onStart -> onResume(생성)
    -> 화면이 다시 생성되므로 내부 값은 초기화됨
  • onSaveInstanceState에서 값을 보관하고 onRestoreInstanceState 또는 onCreate에서 값을 복원
override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putInt("value",value)
}
  • onSaveInstanceState의 outState에 값을 넣으면 onCreate와 onRestoreInstanceState의 Bundle로 받을 수 있다.
profile
반갑습니다

0개의 댓글