Android 액티비티 생명주기 관련 포스트입니다. (Activity LifeCycle)
요즘 안드로이드 공부하는 재미에 빠져있네요.
수년전 안드로이드 앱 개발을 해서 돈을 벌어야겠다 생각하고 거액을 들여 백과사전 같은 2권의 책을 구매하고 Java와의 괴리감을 느끼고 금방 덮어버린 그때와 비교해보면 생각보다 지금의 공부는 나름 순항하고 있는 것 같습니다.
Activity LifeCycle
이번 포스트에서는 안드로이드 앱 화면을 구성하는 액티비티(Activity)에 관한 내용 중 생명주기(LifeCycle)에 대해 알아보려고 합니다.
위 그림은 Android Developer에서 공식 제공하고 있는 생명주기 그림입니다.
안드로이드는 꽤 복잡한 실행 순서를 가지고 있는데요.
자바나 코틀린과 같이 안드로이드 또한 시작점을 가지고 있습니다.
//Java
public static void main(String[] args){
}
//Kotlin
fun main(args : Array<String>){
}
위 코드는 자바와 코틀린의 시작점을 뜻하는 메소드입니다.
일반적으로 메인 메소드(Main Method)라고 표현합니다.
Android는 정확하게 이야기하자면 꽤나 복잡하지만, 우선 처음 시작하시는 분들이라면 onCreate() 부분이 시작점이라고 보시면 됩니다.
// Kotlin기반의 Android onCreate() 부분
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
// Java기반의 Android onCreate() 부분
@Override
Protected void onCreate(Bundle saveInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
onCreate는 Activity가 실행될 때 실행되는 부분으로, 최초 1회만 실행됩니다.
물론 그림에서 보시면 stop이 되었다가 다시 실행될 수는 있습니다.
이 메소드 내부에 화면 구현 코드를 작성을 하기 때문에 일반적으로 다시 실행될 경우 앱이 다시 실행된 것처럼 보일 수 있습니다.
Activity Method
그럼 그림상 Method로 표현되어 있는 부분 중 메소드로 구현하는 주요 요소들에 대해 간단하게 정리하자면 아래와 같습니다.
onCreate() : Activity가 실행되면서 최초 실행되는 메소드
onStart() : Activity가 화면으로 보일 때(만들어질 때) 실행되는 메소드
onPause() : Activity를 떠나는 경우 실행되는 메소드
onResume() : Activity가 시작되면 실행되는 메소드, onStart() 다음으로 실행됨
onStop() : Activity가 화면에 보이지 않을 때(ex. 홈키 누른 경우) 실행되는 메소드
onDestroy() : Activity가 메모리에서 제거될 때(ex. 종료) 실행되는 메소드
실생활 예를 들은 예를 하나 들자면(적당한 예는 아닙니다;), 게임을 하다가 카톡이나 문자를 봐야해서 다른 앱으로 전환을 하거나 홈키를 누르면 앱이 내려가는데, 그 타이밍에 onStop()이 발생합니다.
그리고 곧바로 앱으로 넘어오면 OS가 프로세스를 죽이지 않았기 때문에 재시작되어 onStart()로 넘어와 이전의 메모리를 그대로 사용하지만, 장시간 사용하지 않다가 앱을 실행시키면 이미 자체적으로 프로세스를 Kill한 상태이기 때문에 onCreate()으로 돌아가게 됩니다.
그래서 초기화되는 모습으로 보여집니다.
더 자세한 내용은 안드로이드 공식 페이지 Activity 설명 부분에서 확인하실 수 있습니다.
이런 부분들을 확인해보고 싶으시다면, Activity 파일을 생성하여, 각 메소드를 오버라이딩한 후에 그 안에 Log.d를 사용하여 로그를 남기게끔 한 후에 디버깅해보시면 실시간으로 어떤 메소드가 호출되는지 확인하실 수 있습니다.
이상 Android 액티비티 생명주기 관련 포스트였습니다.
이 외의 Android 포스트를 보고 싶으시다면 여기를 눌러주세요.