프로세스와 앱 수명주기

kosdjs·2025년 6월 9일
0

Android

목록 보기
7/24
  • 대부분의 경우 모든 안드로이드 앱은 자신의 리눅스 프로세스에서 실행됨

  • 앱의 프로세스 수명이 앱에 의해 결정되지 않음

  • 액티비티, 서비스, 브로드캐스트 리시버와 같은 앱 컴포넌트가 앱 프로세스 수명에 어떻게 다르게 영향을 주는지 이해해야 함, 그렇지 않으면 중요한 일을 하는 도중에 시스템이 앱의 프로세스를 종료할 수 있음

  • 안드로이드는 프로세스를 실행 중인 컴포넌트, 그 컴포넌트의 상태를 토대로 중요도 계층 구조를 만듬, 그리고 이 계층 구조에 따라 메모리가 부족할 때 어떤 프로세스를 종료할지 결정함

  • 우선순위는 다른 프로세스와의 종속성에 의해 결정될 수도 있음, 예를 들어 프로세스 A가 Context.BIND_AUTO_CREATE 플래그를 사용하여 서비스에 결합되었거나 프로세스 B의 ContentProvider를 사용하고 있다면 프로세스 B는 항상 프로세스 A의 분류 이상의 우선순위를 가짐

중요도에 따른 프로세스 구분

  1. 포그라운드 프로세스
  • 사용자의 현재 작업에 필요한 프로세스

  • 이런 프로세스는 시스템에 몇 개만 존재하며 메모리가 너무 부족해 이런 프로세스가 계속 실행될 수 없을 때 마지막 수단으로 종료됨, 이런 상황이 일어난다면 장치가 메모리 페이징 상태에 도달한 것으로 ui 반응성을 유지하기 위해 상황이 일어남

  • 프로세스를 이 상태로 만드는 컴포넌트의 조건

    • 액티비티의 경우, 화면의 상단의 실행중이고 사용자가 상호작용하고 있다면 포그라운드에 둠
    • 브로드캐스트 리시버의 경우, 프로세스에 실행중인 것이 있다면 포그라운드에 둠
    • 서비스의 경우, Service.onCreate(), Service.onStart(), Service.onDestroy()와 같은 콜백이 실행중인 프로세스는 포그라운드에 둠
  1. 가시적 프로세스(visible process)
  • 사용자가 인지하고 있는 작업을 하는 프로세스

  • 이 프로세스가 종료되면 사용자 경험에 안좋은 영향을 끼침

  • 포그라운드 프로세스의 수보다 적은 수로 있게 제한되어 있음

  • 매우 중요하다고 고려되기 때문에 포그라운드 프로세스를 실행하는데 메모리가 부족한 경우가 아니라면 종료되지 않음

  • 프로세스를 이 상태로 만드는 컴포넌트의 조건

    • 액티비티의 경우, 화면에 보이지만 포그라운드가 아닌 경우 (onPause()가 불린 경우), 예를 들면 다이얼로그가 떠있을 때 뒤에 가려진 액티비티가 이런 경우에 해당
    • 서비스의 경우, Service.startForeground()로 실행되어 포그라운드 서비스로 실행된 경우
    • 라이브 월페이퍼나 입력 서비스와 같이 사용자가 인지하고 있는 시스템 기능을 위한 서비스
  1. 서비스 프로세스
  • startService() 메소드를 통해 실행된 서비스가 존재한 프로세스

  • 사용자에게 보이진 않지만, 일반적으로 사용자가 신경을 쓰는 작업을 하기 때문에 포그라운드 프로세스와 가시적 프로세스를 실행하는데 메모리가 부족하지 않다면 종료시키지 않음

  • 긴 시간동안 실행되는 서비스는 중요도가 내려갈 수 있음, 따라서 오랜 기간 동안 실행되어야 하는 서비스는 포그라운드 서비스로 생성하거나, 특정 시간에 실행되어야 하는 작업의 경우 AlarmManager를 사용할 수 있음

  1. 캐시된 프로세스
  • 현재 필요하지 않은 프로세스, 시스템이 자원이 필요할 때 종료시킬 수 있음

  • 잘 작동되는 시스템은 이런 프로세스를 앱 사이의 효율적인 교체를 위해 어느정도 유지를 하고 필요하다면 종료시킴

  • 시스템에 의해 언제나 종료될 수 있기 때문에 사용자에게 중요한 일을 해야 한다면 활성화된 프로세스에서 처리되어야 함

  • 사용자에게 더 이상 보이지 않는 액티비티 인스턴스를 가질 수 있는데 앱을 액티비티 수명주기에 맞게 만들었다면 시스템이 프로세스를 종료해도 이전 상태를 복구할 수 있기 때문에 사용자 경험에 영향을 주지 않음

  • 리스트에 저장되어 있음, 이 리스트의 정확한 순서 정책은 플랫폼의 구현 세부 정보임

  • 일반적으로 다른 유형의 프로세스보다 사용자의 홈 애플리케이션을 호스팅하는 프로세스 또는 사용자가 마지막으로 본 활동과 같이 더 유용한 프로세스를 유지하려고 함

  • 허용되는 프로세스 수에 엄격한 제한을 설정하거나 프로세스가 지속적으로 캐시된 상태를 유지할 수 있는 시간의 제한 등 프로세스 종료에 관한 다른 정책도 적용할 수 있음

원문: https://developer.android.com/guide/components/activities/process-lifecycle

0개의 댓글