안드로이드 앱 개발에서 가장 중요한 기본 개념중 하나는 뭘까, 생각해보신 적 있으신가요? 바로 생명주기입니다. 생명주기를 이해하지 못한다면, 앱이 갑자기 종료되거나 예기치 못한 오류 등의 문제가 발생했을때, 문제점을 바로 파악하는데 도움이 되거나, 앱이 원활하게 작동할 수 있도록 영향성이 아주 큰 개념중 하나입니다. 해당 게시글에서는 안드로이드 생명 주기의 각 단계별 동작에 대해서 알아보도록 하겠습니다.
안드로이드 생명주기란?
사용자가 앱을 사용하다가, 앱을 끄거나 앱에서 나가고, 앱으로 돌아오고, 다른 앱으로 전환등의 액션이 취해지면 생명주기 안에서 "상태"가 변경됩니다. Activity 클래스에서는 액티비티가 상태 변화를 알아차릴 수 있는 콜백을 제공하는데, 안드로이드 앱이 실행된 이후 다른 Activity 화면으로 전환되거나, 화면이 꺼지거나, 폰 상태바를 아래로 내려서 Activity가 가려지거나, 혹은 앱이 종료 될때 등을 바로 "상태 변화"가 일어난다고 하는데요. 이런 상태 변화가 있을때마다 화면에 보이는 Activity의 생명주기 메서드를 호출해서 상태 변화를 알려주곤 합니다. 마치 사람이 태어나고 죽기까지의 생명주기가 있듯이, Activity가 시작되고, 종료되기까지의 상태 변화라고 생각하시면 됩니다.
또한, 아래 버튼을 통해서 안드로이드 생명주기 내용을 담고 있는 안드로이드 공식 문서 API를 보실 수 있습니다.
사용자가 A앱을 사용중이었는데, 갑자기 전화가 오거나, 다른 앱으로 전환되었을때 이 생명주기 안에서 "상태 변경"이 되면서 앱이 전환 될 수 있는것인데요. 예시를 하나 들어보자면, Youtube를 보고 있는데 전화가 오면서 전화를 받게 되면 Youtube의 상태가 변경되고, 전화의 상태도 변경되면서 각 2개의 앱의 상태가 변경되게 되죠.
안드로이드 생명주기 조직도
위에서 언급되었듯이 안드로이드 애플리케이션 개발에서 가장 중요한 개념 중 하나는 생명주기입니다. 생명주기를 이해하면 애플리케이션의 안정성과 사용자 경험을 크게 향상시킬 수 있으며 이 글에서는 안드로이드 생명주기의 주요 단계와 각 단계에서의 동작을 설명하겠습니다.
onCreate(), onStart(), onResume()의 역할
안드로이드 애플리케이션의 생명주기는 여러 가지 단계로 구성되어 있습니다. 각 단계에서는 애플리케이션의 상태가 변하며, 그에 따라 특정 메서드가 호출됩니다. 주요 단계는 다음과 같습니다.
- onCreate(): 어플리케이션이 처음 생성될 때 호출되는 메서드입니다. 이 단계에서는 주로 초기화 작업이 수행됩니다.
- onStart(): 어플리케이션이 사용자에게 표시되기 직전에 호출이 됩니다. 즉, 화면에 나타나기 시작하는 순간을 말하는데요. 이 단계에서는 화면에 보여줄 리소스를 준비합니다.
- onResume(): 어플리케이션이 사용자와 상호작용을 시작하기 직전에 호출됩니다. 이 부분에서는 현재 실행 중이면서 화면에 나타나 있는 상태를 뜻합니다. 이 단계에서는 애플리케이션이 활성 상태가 됩니다.
onPause(), onStop(), onDestroy()의 역할
애플리케이션이 백그라운드로 전환되거나 종료될 때는 onPause(), onStop(), onDestroy() 메서드가 차례로 호출됩니다. 각 메서드는 특정한 작업을 수행하며, 이 단계들은 리소스를 효율적으로 관리하는 데 중요한 역할을 합니다.
- onPause(): 애플리케이션이 일시 중지될 때 호출됩니다. 이 단계에서는 애플리케이션이 곧 비활성화될 것이므로, CPU를 많이 소모하는 작업을 중지하거나 데이터를 저장하는 등의 작업을 수행하는데 한마디로 화면이 가려진 상태를 말합니다. Activity 화면의 일부가 다른 Activity에 의해 가려지게 되는 것을 뜻 합니다.
- onStop(): 애플리케이션이 더 이상 사용자에게 표시되지 않을 때 호출됩니다. 이 단계에서는 더 이상 필요하지 않은 리소스를 해제하거나, 애플리케이션의 상태를 저장하는 작업을 수행하는데요. 쉽게 말해서 화면이 없어짐을 뜻합니다. 다른 Activity의 실행으로 인해서 완전히 가려진거죠.
- onDestroy(): 애플리케이션이 완전히 종료될 때 호출됩니다. 이 단계에서는 모든 리소스를 정리하고, 메모리 누수가 발생하지 않도록 주의합니다.
생명주기 메서드 간의 상호작용
안드로이드 생명주기의 각 단계에서는 다양한 메서드가 호출되며, 이들 간의 상호작용을 이해하는 것이 중요합니다. 예를 들어, 사용자가 애플리케이션을 일시적으로 벗어났다가 다시 돌아올 때는 onPause(), onStop(), onRestart(), onStart(), onResume() 메서드가 순차적으로 호출됩니다. 이러한 상호작용을 잘 이해하고 적절히 대응하면 애플리케이션의 성능과 사용자 경험을 크게 개선할 수 있습니다.
- onRestart(): 애플리케이션이 정지 상태에서 다시 시작될 때 호출됩니다. 이 단계에서는 다시 시작을 위한 준비 작업을 수행합니다.
- onStart()와 onResume(): 애플리케이션이 다시 활성화되면서 사용자와 상호작용을 시작하기 전에 호출됩니다. 이 단계에서는 필요한 리소스를 다시 로드하거나, UI를 업데이트하는 작업을 수행합니다.
안드로이드 생명주기는 애플리케이션의 상태 변화에 따라 호출되는 일련의 메서드로 구성되어 있습니다. 각 단계에서 적절한 처리를 통해 애플리케이션의 안정성과 성능을 보장할 수 있습니다. onCreate(), onStart(), onResume()과 같은 초기화 단계와 onPause(), onStop(), onDestroy()와 같은 종료 단계를 이해하고 적절히 대응하는 것이 중요합니다. 생명주기 메서드 간의 상호작용을 잘 이해하고 활용하여, 더욱 효율적이고 사용자 친화적인 안드로이드 애플리케이션을 개발해보세요.