투케이2K

177. (TWOK/LOGIC) [android] 안드로이드 프로세스 킬 (Process kill) 이 되는 경우 및 화면 재진입 시 static 변수 데이터 재저장 로직 본문

투케이2K 로직정리

177. (TWOK/LOGIC) [android] 안드로이드 프로세스 킬 (Process kill) 이 되는 경우 및 화면 재진입 시 static 변수 데이터 재저장 로직

투케이2K 2026. 3. 22. 17:38
728x90
반응형

[로직 정리]

정리 로직 : Mobile / Android

상태 : [android] 안드로이드 프로세스 킬 (Process kill) 이 되는 경우 및 화면 재진입 시 static 변수 데이터 재저장 로직

 

[설 명]

// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------

1. 제 목 : [android] 안드로이드 프로세스 킬 (Process kill) 이 되는 경우 및 화면 재진입 시 static 변수 데이터 재저장 로직


2. 테스트 환경 : Android / Device / APP


3. 사전) 👉 안드로이드 기본 Activity 라이프 사이클 간략 설명 : 

  >> onCreate() : Activity 가 처음 만들어질 때 1번만 호출 (단, 프로세스가 죽었다면 다시 실행될 수 있음)
      
  >> onStart() : Activity 가 화면에 보이기 시작할 때 (아직 사용자 입력을 받지는 않음 / UI 업데이트, 애니메이션 준비)
    
  >> onResume() : Activity 가 사용자와 완전히 상호작용 가능한 상태 (포그라운드 진입 / 사용자 입력 가능 상태)
    
  >> 사용자와 상호작용 : Running 상태
    
  >> onPause() : 다른 Activity 가 올라올 때 호출 (다른 Activity 전환 / 화면 일부 가려짐)
    
  >> onStop() : Activity 가 완전히 화면에서 사라짐 (백그라운드로 갔을 때 / 다른 Activity가 전체 화면으로 올라왔을 때)
    
  >> onDestroy() : Activity 가 완전히 사라질 때 호출 (finish() / 재생성(recreate) / 앱 프로세스가 Kill 되어 시스템에 의해 종료)


// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------

--------------------------------------------------------------------
✅ 휴대폰 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" 를 고려해서 상태 복구 로직을 작성해야 함


--------------------------------------------------------------------
✅ 로직 정리
--------------------------------------------------------------------

1. 특정 앱을 실행 한 후 기능 동작 > 장기간 백그라운드로 앱을 내립니다.


2. 특정 앱을 백그라운드로 내린 상태에서, 다른 앱 사용 및 동영상 시청 등 다른 활동 수행 실시


3. ✔️ (중요) Android OS 에서 자동으로 백그라운드 프로세스 kill 이 된 것 확인

  >> 포그라운드 앱이 메모리가 필요할 때

  >> 장시간 백그라운드 + 시스템 메모리 압박

  >> 오래된 앱 우선 정리 정책(LRU 프로세스 리스트)

  >> 사용자가 다른 앱을 많이 켬

  >> Android 시스템 정책(OOM ADJ)에 따라 필요 시 Kill


4. task 목록에 있는 앱을 다시 실행해서 기능 동작 수행 시 static 으로 초기화 되었던 변수가 null 로 초기화 된 것 확인

  >> 앱 프로세스가 죽으면 다음 실행 시 static 은 전체 초기화


5. ✔️ 방어 로직 [1] : 

  >> 앱 라이프 사이클 onPause 중지 상태 전환 시 타임 스탬프 저장 및 포그라운드 onResume 실행 시 타임 스탬프 값을 저장해 비교 수행

  >> 일정 시간 장기간 활동 없이 포그라운드로 전환 된 경우 경고 팝업 알림창 표시 수행 및 앱 정상 재실행 요청


6. ✔️ 방어 로직 [2] : 

  >> onCreate 에서 생성 된 static 변수들을 프리퍼런스 저장 공간에 재저장을 수행

  >> 앱 라이프 사이클 onResume 에서 static 변수 값 null 체크 후 초기화 된 경우 프리퍼런스에 저장된 값을 사용해 다시 재저장 수행

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[개념 정리] 안드로이드 프로세스 킬 (Process kill) 이 되는 경우 및 Recents 화면 재진입 시 액티비티 recreate 정리

https://kkh0977.tistory.com/8707

https://blog.naver.com/kkh0977/224222584942


[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
반응형
Comments