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
반응형
'안드로이드 학습(Kotlin)' 카테고리의 다른 글
6. Android Theme (테마) (0) | 2025.02.03 |
---|---|
5. Android Permission (권한) (0) | 2025.02.03 |
3. Android 4대 컴포넌트 (Activity, Service, BroadcastReceiver, ContentProvider)의 이해 (0) | 2025.01.24 |
2. Gradle 빌드 시스템의 이해 (0) | 2025.01.24 |
1. Android 스튜디오와 프로젝트 구조 (2) | 2025.01.23 |