[Android 개념] Activity lifecycle

이창민·2022년 7월 21일
0

Android 개념

목록 보기
2/9

액티비티 생명주기

Activity의 모든 인스턴스는 생명주기를 갖는다.
생명주기 동안 액티비티는 네 가지 상태로 상호 전환된다.

  1. 실행 재개(resumed)
  • 액티비티가 메모리에 있고 화면에서 전체를 볼 수 있고 포그라운드에 있는 상태
  • 사용자와 현재 상호작용하고 있는 액티비티의 상태
  • 전체 시스템에 걸쳐 하나의 액티비티만 될 수 있는 상태
  1. 일시 중지(paused)
  • 액티비티가 포그라운드에서 작동하지 않지만, 인스턴스의 뷰 전체 혹 일부를 화면에서 볼 수 있음
  • 메모리에 있음
  1. 중단(stopped)
  • 액티비티 인스턴스가 메모리에 있지만, 뷰는 화면에서 볼 수 없음
  • 액티비티가 처음 시작될 때 거쳐가는 상태
  • 액티비티 인스턴스의 뷰가 화면에서 완전히 가려졌을 때 언제든 다시 진입하는 상태
  1. 존재하지 않음(nonexistent)
  • 액티비티가 아직 런칭되지 않았거나 소멸된 상태
  • 메모리에 존재하지 않음, 뷰도 없음

각 상태로 전환이 발생할 때 액티비티에 상태 변경을 알려주는 Actvitiy 함수들이 있으며, 이 함수들은 안드로이드가 자동 호출한다.

액티비티 생명주기 로깅

private const val TAG = "MainActivity"

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.d(TAG, "onCreate(Bundle?) called")
        setContentView(R.layout.activity_main)
    }

    override fun onStart() {
        super.onStart()
        Log.d(TAG, "onStart() called")
    }

    override fun onResume() {
        super.onResume()
        Log.d(TAG, "onResume() called")
    }

    override fun onPause() {
        super.onPause()
        Log.d(TAG, "onPause() called")
    }

    override fun onStop() {
        super.onStop()
        Log.d(TAG, "onStop() called")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d(TAG, "onDestroy() called")
    }
}

위 와 같이 생명주기 callback method를 오버라이드해 찍어서 어플을 실행시킨 후
홈키를 누르고 다시 어플을 키고.. 백키를 누르고 다시 어플을 켜보면 어플이 어떻게 돌아가는지 볼 수 있다.

홈 버튼을 누르고 다시 실행시키면onPause -> onStop -> onStart -> onResume 이 실행된다.
즉, 위 상태 분류에 따르면 중단상태가 된다.

백 버튼을 누르고 다시 실행시키면onPause -> onStop -> onDestroy -> onCreate -> onStart -> onResume 이 실행된다.
즉, 존재하지 않는 상태까지 갔다 온다.
백 버튼을 누른다는 의미는 해당 액티비티를 끝냈다는 의미가 된다.
안드로이드 OS에 나는 액티비티를 다 사용했으니 필요없다라고 하는 셈이다.
그러면 안드로이드 OS는 해당 액티비티를 소멸시키고 메모리에서 모든 흔적을 지운다.
이것이 제한된 리소스를 절약하는 안드로이드의 방식이다.

액티비티 회전

사용자가 장치를 회전할 때 안드로이드 OS는 액티비티를 소멸시킨다.

이런 문제는 ViewModel에 UI data를 저장해 UI 상태가 유실되는 결함을 해결할 수 있다.

profile
android 를 공부해보아요

0개의 댓글