Activity LifeCycle
모든 Activity에는 LifeCycle이 있다. Activity가 처음 초기화될 때부터 소멸(이때 운영체제에서 메모리를 회수함)될 때까지 활동이 거쳐가는 여러 상태로 구성된다. Activity는 onCreate() 메서드로 시작한다. 사용자가 앱을 시작하여 Activity 간에 이동하고 앱 안팎으로 이동할 때 Activity는 상태를 변경한다.
LifeCycle의 모든 상태

Activity의 LifeCycle 상태가 변경될 때 AppCompatActivity 클래스에 정의되어 있는 콜백 메소드를 오버라이드하여 각 상태에 사용자 정의 코드를 구현할 수 있다.
onCreate()
- Activity를 생성할 때 실행되고 필수적으로 구현되야 함.
- Activity가 생성되면 Created 상태가 된다.
- Activity의 전체 수명 주기 동안 한 번만 발생하는 기본 애플리케이션 시작 로직을 작성한다. ex) 뷰 바인딩, 인스턴스 초기화, 레이아웃 설정
- onCreate() 메서드가 실행을 완료하면 Started 상태가 되고 시스템은 onStart() 및 onResume() 메서드를 연속으로 호출.
lateinit var textView: TextView
// Some transient state for the activity instance.
var gameState: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
// Call the superclass onCreate to complete the creation of
// the activity, like the view hierarchy.
super.onCreate(savedInstanceState)
// Recover the instance state.
gameState = savedInstanceState?.getString(GAME_STATE_KEY)
// Set the user interface layout for this activity.
// The layout is defined in the project res/layout/main_activity.xml file.
setContentView(R.layout.main_activity)
// Initialize member TextView so it is available later.
textView = findViewById(R.id.text_view)
}
onStart()
- onStart() 메소드 호출을 통해 앱에서 활동이 포그라운드로 전환되어 상호작용할 수 있도록 준비할 때 사용자에게 Activity가 표시된다.
- 예를 들어 이 메서드에서 UI를 유지하는 코드가 초기화
- onStart() 메서드는 빠르게 완료되며, Created 상태와 마찬가지로 활동은 Started 상태로 유지되지 않는다. 이 콜백이 완료되면 Activity가 Resumed 상태로 전환되고 시스템에서 onResume() 메서드를 호출한다.
onResume()
- 활동이 Resumed 상태로 전환되면 포그라운드로 이동하고 시스템에서 onResume() 콜백을 호출한다.
- 이 상태에 들어갔을 때 앱이 사용자와 상호작용한다. 앱은 전화가 걸려오거나 사용자가 다른 활동으로 이동하거나 기기 화면이 꺼지는 등 어떤 일이 발생하여 앱에서 포커스를 잃을 때까지 이 상태를 유지한다.
- 방해가 되는 이벤트가 발생하면 Activity는 Paused 상태가 되고 시스템은 onPause() 콜백을 호출합니다.
- Activity가 Paused 상태에서 Resumed 상태로 돌아오면 시스템은 onResume() 메서드를 다시 한번 호출한다. 따라서 onResume()를 구현하여 onPause() 중에 해제하는 구성요소를 초기화하고 Activity가 Resumed 상태로 전환될 때마다 발생해야 하는 다른 초기화를 실행한다.
onPause()
- 시스템은 사용자가 Activity를 떠난다는 첫 번째 신호로 이 메서드를 호출하지만, 이것이 항상 Activity가 소멸된다는 의미는 아니다. 이는 Activity가 더 이상 포그라운드에 있지 않음을 나타내지만 사용자가 멀티 윈도우 모드에 있는 경우에는 계속 표시된다.
- onPause() 메서드를 사용하여 Activity가 Paused 상태에 있고 곧 재개될 것으로 예상되는 작업을 계속할 수 없거나 적절하게 진행될 수 있는 작업을 일시중지하거나 조정한다.
- 또한 onPause() 메서드를 사용하여 시스템 리소스, 센서 핸들 (예: GPS) 또는 Activity가 일시중지되어 사용자에게 필요하지 않은 동안 배터리 수명에 영향을 미치는 모든 리소스를 해제할 수도 있다.
- onPause() 실행은 매우 짧으며 저장 작업을 실행하기에 충분한 시간을 제공하지 않을 수 있다. 따라서 처리하는데 긴 시간이 걸리는 애플리케이션 또는 사용자 데이터를 저장하거나, 네트워크를 호출하거나, 데이터베이스 트랜잭션을 실행하는 데 onPause()를 사용하면 안 된다.
- Activity가 완전히 보이지 않게 되면 시스템은 onStop()를 호출한다.
onStop()
- Activity가 사용자에게 더 이상 표시되지 않으면 Stopped 상태로 전환되고 시스템에서 onStop() 콜백을 호출한다. 이는 새로 시작된 Activity가 전체 화면을 차지할 때 발생할 수 있다. 또한 시스템은 Activity 실행이 완료되고 종료되려고 할 때 onStop()를 호출한다.
- onStop() 메서드에서 앱이 사용자에게 표시되지 않는 동안 필요하지 않은 리소스를 해제하거나 조정한다.
- onStop()를 사용하여 CPU를 비교적 많이 사용하는 종료 작업을 실행한다.
- Activity가 Stopped 상태로 전환되면 Activity 객체는 메모리에 상주한다. 즉, 모든 상태 및 멤버 정보를 유지하지만 창 관리자에 연결되지는 않는다. Activity가 재개되면 이 정보를 리콜한다.
- Activity눈 Stopped 상태에서 다시 시작되어 사용자와 상호작용하거나, 실행을 종료하고 사라집니다. Activity가 다시 시작되면 시스템은 onRestart()를 호출한다. Activity가 실행을 종료하면 시스템은 onDestroy()를 호출한다.
onDestroy()
- onDestroy()는 Activity가 소멸되기 전에 호출된다.
- Activity가 완료되는 경우 onDestroy()는 활동이 수신하는 최종 수명 주기 콜백이다. 구성 변경의 결과로 onDestroy()가 호출되면 시스템은 즉시 새 활동 인스턴스를 만든 다음 새 구성의 이 새 인스턴스에 onCreate()를 호출한다.