Notice
Recent Posts
Recent Comments
Link
투케이2K
1051. (Android/Java) [개념 정리] 안드로이드 프로세스 킬 (Process kill) 이 되는 경우 및 Recents 화면 재진입 시 액티비티 recreate 정리 본문
Android
1051. (Android/Java) [개념 정리] 안드로이드 프로세스 킬 (Process kill) 이 되는 경우 및 Recents 화면 재진입 시 액티비티 recreate 정리
투케이2K 2026. 3. 19. 19:49728x90
반응형
[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java / Kotlin

[설명 정리]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Java / Kotlin
- 개발 툴 : AndroidStudio
- 기술 구분 : Android / Life Cycle / Process Death
- 사전) 👉 안드로이드 기본 Activity 라이프 사이클 간략 설명 :
>> onCreate() : Activity 가 처음 만들어질 때 1번만 호출 (단, 프로세스가 죽었다면 다시 실행될 수 있음)
>> onStart() : Activity 가 화면에 보이기 시작할 때 (아직 사용자 입력을 받지는 않음 / UI 업데이트, 애니메이션 준비)
>> onResume() : Activity 가 사용자와 완전히 상호작용 가능한 상태 (포그라운드 진입 / 사용자 입력 가능 상태)
>> 사용자와 상호작용 : Running 상태
>> onPause() : 다른 Activity 가 올라올 때 호출 (다른 Activity 전환 / 화면 일부 가려짐)
>> onStop() : Activity 가 완전히 화면에서 사라짐 (백그라운드로 갔을 때 / 다른 Activity가 전체 화면으로 올라왔을 때)
>> onDestroy() : Activity 가 완전히 사라질 때 호출 (finish() / 재생성(recreate) / 앱 프로세스가 Kill 되어 시스템에 의해 종료)
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[설명 정리]
// --------------------------------------------------------------------------------------
--------------------------------------------------------------------
✅ 사전) 실전 중요 포인트 정리
--------------------------------------------------------------------
1) 화면 회전 등 Configuration 변경 시 액티비티는 완전히 재생성됨
>> onDestroy() → onCreate()
>> 상태 저장 필요 : onSaveInstanceState(), ViewModel, SavedStateHandle 이용
2) 프로세스가 생존해 있는 경우 백그라운드로 갔다가 다시 올 때 onCreate() 는 보통 호출되지 않음
3) 백그라운드에서 오래 있거나 OS가 메모리 정리하면 Activity 는 Kill 됨
>> 다시 실행 시 onCreate() 부터 시작
>> 휴대폰 Recents 화면이 보여준 건 스크린샷일 뿐
4) static / singleton / 글로벌 변수는 Activity 라이프사이클과 별개
>> 프로세스가 살아있는 동안 유지됨
>> 프로세스가 죽으면 모두 초기화됨
--------------------------------------------------------------------
✅ 휴대폰 Recents 최근 작업 화면에 표시 되는 앱 프로세스 구동 여부
--------------------------------------------------------------------
1) 안드로이드는 앱을 백그라운드로 보낼 때 해당 Activity 의 스크린샷을 찍어 저장합니다.
>> ✔️ (중요) 휴대폰 Recents 최근 작업 화면에 앱이 표시 된다고 해서 실제로 앱이 살아 있다고 보장할 수 없습니다.
2) 앱 프로세스가 죽어도 , Activity 인스턴스가 없어져도 , View 나 Data 가 모두 사라져도 휴대폰 Recents 화면에는 마지막 스크린샷이 남아 있기 때문에 마치 앱이 살아있는 것처럼 보일 뿐입니다.
>> ✔️ (중요) 대폰 Recents 화면은 진짜 Activity 가 아니라 이미지입니다.
--------------------------------------------------------------------
✅ 휴대폰 Recents 최근 작업 화면에서 앱 구동 시 이전 화면으로 표시되는 이유
--------------------------------------------------------------------
1) 안드로이드가 Activity 를 “재생성” 해주는 것처럼 보이기 때문입니다.
2) 앱이 죽은 상태에서 Recents 에서 다시 진입하면 OS 가 하는 행동
>> 앱 프로세스 재시작
>> Launcher Activity (앱 첫 화면) 을 호출하는 대신
>> Recents 에 남아 있던 Task stack 정보를 기반으로
>> 그 Task의 맨 위 Activity 를 recreate() 해서 다시 만듭니다
- 이전 Activity 인스턴스를 불러오는 게 아님
- 완전히 새로운 Activity 객체가 생성됨
- 멤버 변수 · static 변수 등은 초기화됨 (프로세스 새로 시작했으니까)
--------------------------------------------------------------------
✅ 안드로이드가 프로세스를 Kill하는 시점 정리
--------------------------------------------------------------------
1) ✔️ 포그라운드 앱이 메모리가 필요할 때
2) ✔️ 장시간 백그라운드 + 시스템 메모리 압박
3) ✔️ 오래된 앱 우선 정리 정책 (LRU 프로세스 리스트)
4) ✔️ 사용자가 다른 앱을 많이 켬
5) ✔️ Android 시스템 정책 (OOM ADJ) 에 따라 필요 시 Kill
6) 프로세스 kill 예시 정리 :
>> 사용자는 특정앱을 실행한 후 기능 사용 동작
>> 홈 버튼 등을 눌러서 앱을 백그라운드 상태로 전환 수행 (Recents 목록에는 앱이 표시 됨)
>> OS 가 메모리 부족으로 앱 프로세스를 Kill 수행
>> 사용자가 Recents 목록에 있는 앱을 다시 실행 시 Activity 를 recreate() 수행
7) 프로세스 kill 이 되는 경우 onDestroy() 가 호출될 수도 있고, 아예 호출되지 않을 수도 있습니다.
override fun onDestroy() {
super.onDestroy()
}
8) 안드로이드 공식 문서에서의 중요 프로세스 kill 관련 사항 :
>> 안드로이드는 프로세스가 죽어도 Task 는 유지되며, 사용자가 다시 실행하면 Activity가 복원 (recreate) 될 수 있다고 명시합니다.
>> Activity 는 언제든 OS 가 kill 할 수 있음
>> OS 는 이후엔 onCreate() 로 새로운 Activity 를 생성해서 복원할 수 있음
>> 개발자는 "process death" 를 고려해서 상태 복구 로직을 작성해야 함
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[Application 애플리케이션 클래스 ActivityLifecycleCallbacks 상속 후 Activity 액티비티 라이프 사이클 감지]
https://kkh0977.tistory.com/4875
https://blog.naver.com/kkh0977/223264773475?trackingCode=blog_bloghome_searchlist
[안드로이드 액티비티 라이프 사이클 (android activity life cycle) 정리]
https://kkh0977.tistory.com/2594
https://blog.naver.com/kkh0977/222881980957?trackingCode=blog_bloghome_searchlist
[Fragment] 프레그먼트 기본 라이프 사이클 정의 클래스 (class)
https://kkh0977.tistory.com/3717
https://blog.naver.com/kkh0977/222981427283?trackingCode=blog_bloghome_searchlist
[Android] 라이프사이클 onCreate 재호출 이슈 (reCall)
https://kkh0977.tistory.com/3323
https://blog.naver.com/kkh0977/222938687189?trackingCode=blog_bloghome_searchlist
// --------------------------------------------------------------------------------------
728x90
반응형
'Android' 카테고리의 다른 글
Comments
