안녕하세요! 이번 글에서는 안드로이드 앱 개발에서 가장 중요한 개념 중 하나인 액티비티 생명주기에 대해 자세히 살펴보겠습니다. 액티비티는 사용자와 상호작용하는 화면을 구성하는 기본적인 컴포넌트이며, 그 생명주는 앱이 다양한 상태를 전환할 때 어떻게 변화하는지를 정의합니다. 사용자가 앱을 사용하면서 액티비티는 여러 상태를 거치며 이 과정에서 중요한 정보를 저장하거나 복원하는 방법에 대해 알아보겠습니다.
액티비티란?
액티비티(Activity)는 안드로이드에서 사용자와 상호작용 할 수 있는 화면을 나타내는 가장 기본적인 컴포넌트입니다. 액티비티는 각기 다른 UI 구성요소를 통해 다양한 작업을 수행할 수 있게 해 주며, 여러 개의 액티비티를 조합하여 앱을 구성할 수 있습니다. 예를 들어, 사진 갤러리 앱은 사진 선택을 위한 액티비티, 사진 보기 액티비티, 설정 액티비티 등을 가질 수 있습니다.
액티비티 생명주기
액티비티의 생명주기는 onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()와 같은 여러 가지 콜백 메소드를 통해 관리됩니다. 각각의 메소드는 액티비티의 상태가 변경될 때 호출되며, 이를 통해 개발자는 액티비티가 매니페스트에 선언된 대로 작동하도록 제어할 수 있습니다.
1. onCreate()
어플리케이션이 처음 실행될 때 호출되는 메소드로, 일반적으로 UI를 초기화하는 작업을 수행합니다. 액티비티가 최초로 생성될 때 한 번만 호출됩니다. 이곳에서 layout을 설정하고, 데이터 바인딩을 일반적으로 수행합니다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
2. onStart()
액티비티가 사용자에게 보이기 시작할 때 호출됩니다. 이 메소드는 액티비티가 사용자와 상호작용을 시작하기 직전에 호출되며, 액티비티가 화면에 나타나지만 아직은 포커스를 받지 않는 상태입니다.
override fun onStart() {
super.onStart()
// 액티비티가 사용자에게 보여지는 준비 작업을 수행합니다.
}
3. onResume()
사용자가 액티비티와 상호작용할 수 있을 때 호출됩니다. 이 메소드에서 UI와 사용자 상호작용을 최적화하는 코드를 작성할 수 있습니다.
override fun onResume() {
super.onResume()
// 액티비티가 포커스를 받을 때 호출되며 UI 업데이트 작업을 수행합니다.
}
4. onPause()
다른 액티비티가 사용자에게 보여지기 시작하면 호출됩니다. 이 메소드는 주로 데이터 저장이나 리소스 해제 작업을 수행하는 데 사용됩니다.
override fun onPause() {
super.onPause()
// 액티비티를 떠나기 전에 필요한 데이터를 저장합니다.
}
5. onStop()
액티비티가 완전히 보이지 않게 될 때 호출됩니다. 예를 들어, 다른 액티비티가 완전히 화면을 가렸거나 앱이 백그라운드로 이동할 때 이 메소드가 호출됩니다. 필요한 경우 여기서 모든 리소스를 해제할 수 있습니다.
override fun onStop() {
super.onStop()
// UI 업데이트를 중지하고 리소스를 필요에 따라 해제합니다.
}
6. onDestroy()
액티비티가 종료될 때 마지막으로 호출되는 메소드입니다. 메모리 해제를 위해 필요한 작업을 수행할 수 있고, 보통 이 메소드는 액티비티가 더 이상 사용되지 않을 때 호출됩니다. 모든 리소스를 정리합니다.
override fun onDestroy() {
super.onDestroy()
// 액티비티 정리 및 자원 해제 작업을 수행합니다.
}
액티비티의 생명주기 시퀀스
액티비티가 생성되고 종료될 때의 생명주기 상태를 다음과 같이 그림으로 표현할 수 있습니다.
생명주기 메소드 활용 예제
이제 실제 예제를 통해 액티비티 생명주기 메소드를 활용하는 방법을 보여드리겠습니다. 아래는 간단한 카운터 앱을 구현한 예제입니다. 이 앱은 사용자 인터페이스에서 버튼을 클릭할 때마다 카운트를 증가시키고, 생명주기 메소드를 사용하여 데이터를 저장 및 복원하는 방법을 보여줍니다.
class CounterActivity : AppCompatActivity() {
private var counter = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_counter)
// 이전 상태 복원
savedInstanceState?.let {
counter = it.getInt("counter", 0)
}
findViewById
결론
이번 글에서는 코틀린을 사용한 안드로이드의 액티비티 생명주기에 대해 알아보았습니다. 액티비티 생명주기를 이해하고 이를 잘 활용한다면, 앱의 퍼포먼스를 높이고 사용자 경험을 개선하는 데 큰 도움이 될 것입니다. 다음 강좌에서는 서비스와 브로드캐스트 리시버 등 다른 안드로이드 컴포넌트에 대해 알아보겠습니다. 감사합니다!