이번에는 kotlin과 함께 안드로이드 생명주기에 대해서 알아볼 것이다.
안드로이드에서는 사용자와 앱 사이의 어떠한 이벤트의 발생에 대한 기본적인 처리방법을 제공해준다.
우리는 앱을 사용하면서 많은 이벤트를 발생시키고 있는데 그 상황에 대해서 잠깐 생각해보자
위와 같이 어떠한 상황에 따른 처리방법을 우리는 코드를 작성해 해결해주어야 할 의무가 있다.
그러므로 우리는 기본적으로 Android Life Cycle에 대해 공부해야한다.
활동 수명 주기 단계 간에 전환하기 위해 활동 클래스는 6가지 콜백으로 구성된 핵심 집합의 onCreate(), onStart(), onPause(), onStop(), onDestroy()를 제공한다.

위 그림은 공식문서에 나와있는 Activity Life Cycle에 대해 표현한 그림이다.
나와 비슷한 사람들은 이것을 보고 아무생각도 들지 않을것이다. 난 진짜 아무 생각도 안들었다,,,
그래서 내가 간단한 코드로 설명해보려고 한다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// onCreate는 액티비티가 생성될 때 호출되며 사용자 인터페이스 초기화 할 때 이 곳에 구현.
println("onCreate !!!")
}
onCreate()는 액티비티가 생성, 실행될 때 호출이 되며, 사용자 인터페이스를 초기화 할 때 이 곳에 구현한다.
println()을 찍어보면 앱을 실행했을 경우 찍히게 된다.
override fun onStart() {
super.onStart()
// 액티비티가 사용자에게 보여지기 직전에 호출 됨.
println("onStart !!!")
}
활동이 시작됨 상태에 들어가면 시스템은 onStart()를 호출한다.
onStart()가 호출되면 활동이 사용자에게 표시되고, 앱은 활동을 포그라운드에 보내 상호작용할 수 있도록 준비한다.
override fun onResume() {
super.onResume()
// 액티비티가 사용자랑 상호작용 하기 직전에 호출 됨. ( 시작 or 재개 상태 )
println("onResume !!!")
}
이 상태에 들어갔을 때, 앱이 사용자와 상호작용한다.
어떤 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 앱이 이 상태에 머무르게 된다.
ex) 전화가 오거나, 다른 활동으로의 이동, 기기 화면이 꺼짐.
override fun onPause() {
super.onPause()
// 다른 액티비티가 보여지게 될 떄 호출됨. ( 중지 상태 )
println("onPause !!!")
}
시스템은 사용자가 활동을 떠나는 것을 나타내는 첫 번째 신호로 이 메서드를 호출하게 된다.
onPause() 는 활동이 다시 시작되거나 사용자에게 완전히 보이지 않을 때까지 이 상태에 머무르게 된다.
활동이 다시 시작되면 시스템은 onResume() 메서드를 호출한다.
override fun onStop() {
super.onStop()
// 액티비티가 사용자에게 완전히 보여지지 않을 때 호출됨.
println("onStop !!!")
}
활동이 사용자에게 더 이상 표시되지 않으면 중단됨 상태에 들어가고, 시스템은 onStop()을 호출하게 된다.
override fun onDestroy() {
super.onDestroy()
// 액티비티가 소멸( 제거 )될 때 호출됨.
println("onDestroy !!!")
}
onDestroy() 는 활동이 소멸되기 전에 호출되며, finish() 메서드가 호출된 경우, 구성 변경으로 인해 시스템이 일시적 활동을 소멸시키는 경우에 발생하게 된다.
override fun onRestart() {
super.onRestart()
// 액티비티가 멈추었다가 다시 시작 될 때 호출됨.
println("onRestart !!!")
}
위 경우는 액티비티가 멈추었다가 다시 시작 될 때 호출되는데, 이것은 공식문서에 나와있지 않으므로 이런게 있다. 라고 알아두면 좋을 것 같다.

위 그림은 프로세스 상태에 따른 액티비티의 상태를 보여주며 그에 따른 종료될 가능성에 대한 상관관계를 보여준다.
나중에 에러가 났을 경우, 위 그림을 통해서 생명주기에 대한 에러를 처리할 수 있을 것 같아서 올린다.