안드로이드 학습(Kotlin)

4. Android Activity LifeCycle과 Activity 전환

리저브콜드브루 2025. 2. 3. 10:49
728x90
반응형

Activity LifeCycle의 기본 개념

  • Activity는 Android 시스템에 의해 관리되는 여러 생명주기 상태를 거치며 작동한다.
  • 각 상태마다 호출되는 콜백 메서드가 있으며, 이 메서드들을 오버라이드하여 필요한 처리를 할 수 있다.

주요 콜백 메서드

메서드 설명
onCreate() Activity가 처음 생성될 때 호출 (UI 초기화, 리소스 로드)
onStart() Activity가 사용자에게 보여지기 직전 호출
onResume() Activity가 Foreground에 있고 사용자와 상호작용 가능할 때 호출
onPause() 다른 Activity가 Foreground로 올 때 호출 (일시정지)
onStop() Activity가 더 이상 사용자에게 보이지 않을 때 호출
onRestart() onStop() 상태에서 다시 onStart()로 전환될 때 호출
onDestroy() Activity가 완전히 종료되기 직전 호출 (리소스 정리)

Activity LifeCycle 흐름

  • 앱 실행 시: onCreate() >> onStart() >> onResume()
  • 앱 종료 시: onPause() >> onStop() >> onDestroy()
  • 일시 중지 후 재개 시: onPause() >> onResume()

상태별 특징

상태 설명
활성 상태 (Resumed) 앱이 포그라운드에 있고 사용자와 상호작용 가능
일시정지 상태 (Paused) 앱은 보이지만 포커스가 없음 (다이얼로그, 팝업 등)
중지 상태 (Stopped) 앱이 백그라운드로 이동하여 보이지 않음
종료 상태 (Destroyed) 시스템에 의해 메모리 해제 또는 사용자에 의해 종료됨

 


onCreate()

  • Activity가 최초로 생성될 때 호출되는 메서드
  • 주로 초기화 작업, 레이아웃 설정, 데이터 로드 등을 수행

활용 예시

  • setContentView() 호출하여 UI 설정
  • 데이터베이스 연결 초기화
  • Intent를 통해 전달된 데이터 수신

onStart()

  • Activity가 사용자에게 보이기 시작할 때 호출
  • 아직 포그라운드 상태는 아니지만 UI는 표시됨

활용 예시

  • 앱 실행 시 초기 데이터 불러오기
  • 애니메이션 시작 준비
  • 리소스 연결 (예: 센서, 서비스 바인딩)

onStop()

  • Activity가 더 이상 화면에 보이지 않을 때 호출
  • 백그라운드로 완전히 전환된 상태

활용 예시

  • 배터리 소모를 줄이기 위해 리소스 해제
  • 불필요한 네트워크 연결 종료
  • 데이터베이스 연결 해제

onDestroy()

  • Activity가 완전히 종료되기 직전 호출
  • 리소스 해제 또는 메모리 누수 방지 작업 수행

활용 사례

  • 메모리 정리
  • 백그라운드 서비스 종료
  • 종료 로그 저장

 Activity 전환 (Activity 간 이동)

Activity 전환은 주로 Intent를 사용하여 수행한다.

val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
  • startActivity(): 새로운 Activity를 시작
  • finish(): 현재 Activity 종료

데이터 전달 (Intent 사용)

데이터 전달하기

val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("username", "R_Coldbrew")
startActivity(intent)

 

데이터 받기

val username = intent.getStringExtra("username")

Activity 전환 시 LifeCycle의 변화

Activity A >> Activity B로 전환될 때

  • A: onPause() >> onStop()
  • B: onCreate() >> onStart() >> onResume()

Activity B 종료 후 Acitivity A로 돌아올 때

  • B: onPause() >> onStop() >> onDestroy()
  • A: onRestart() >> onStart() >> onResume()

Activity LifeCycle과 상태 저장

onSaveInstanceState()

  • Activity가 비정상적으로 종료될 경우(예: 화면 회전) 상태를 저장하는 메서드
  • Bundle 객체를 통해 데이터 저장
override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString("username", "R_Coldbrew")
}

onRestoreInstanceState()

Activity가 다시 생성될 때 호출되어 저장된 상태를 복원함

override fun onRestoreInstanceState(savedInstanceState: Bundle) {
    super.onRestoreInstanceState(savedInstanceState)
    val username = savedInstanceState.getString("username")
}

LifeCycle과 메모리 관리

  • Android는 메모리가 부족할 때 백그라운드 Activity를 자동으로 종료할 수 있음
  • onStop()과 onDestroy()는 반드시 호출된다고 보장할 수 없음
  • 항상 onPause() 또는 onSaveInstanceState()에서 중요한 데이터 저장 필요

실무에서의 활용 예시

상황 처리 방법
화면 회전 시(가로, 세로 전환) 데이터 유지 onSaveInstanceState()와 onRestoreInstanceState() 활용
전화 수신 중 앱 상태 유지 onPause()에서 상태 저장, onResume()에서 복원
로그인 유지 onStop()에서 토큰 저장, onRestart()에서 복원
백그라운드로 이동 시 작업 중지 onStop()에서 네트워크 요청 중단

 

728x90
반응형