ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 안드로이드 프로세스 및 어플리케이션 생명주기
    안드로이드 학습/Android 기술면접 대비 2024. 1. 18. 16:30

    안드로이드에서 앱을 다운받고 실행되는 과정에서 여러 앱이 동시에 사용되거나 캐시 및 데이터가 추척되는 이유 등으로 메모리가 부족할 수 있다. 안드로이드에서는 메모리가 부족할 경우 기존에 실행되고 있던 앱을 종료시키는 과정을 거쳐 메모리를 확보한다. 

     

    앱을 종료시키는 기준은 각 앱별로 프로세스의 중요도를 기준으로 중요도가 낮은순부터 앱을 종료시킨다. 그래서 안드로이드 프로세스에 대해 공부할 필요성이 있다. 

    프로세스의 4가지 유형

    1. Foreground process (포그라운드 프로세스)

    사용자가 현재 하고 있는 작업에 필요한 프로세스입니다. 다음 조건 중 하나라도 해당하면 프로세스가 포그라운드에 있는 것으로 간주됩니다.

    • 현재 유저가 사용하고 있는 process이며, 가장 높은 우선순위를 가진다. 
    • 화면 상단에서 사용자가 상호 작용하는 Activity를 실행 중인 경우 (onResume() 메서드가 호출됨).
    • 현재 실행 중인 BroadcastReceiver가 있는 경우 (BroadcastReceiver.onReceive() 메서드가 실행 중).
    • 현재 콜백 중 하나에서 코드를 실행 중인 Service가 있는 경우 (Service.onCreate(), Service.onStart(), 또는 Service.onDestroy()).

    시스템에는 이러한 프로세스가 항상 몇 개만 있으며, 이러한 프로세스 조차도 계속 실행할 수 없을 정도로 메모리가 극도로 낮을 때에만 마지막 수단으로 종료됩니다. 일반적으로 이러한 상황이 발생하면 장치가 메모리 페이징 상태에 도달한 것이므로 이 조치가 사용자 인터페이스를 반응적으로 유지하기 위해 필요합니다.

    2. Visible Process 

    사용자가 현재 알고 있는 작업을 하므로 이 프로세스를 종료하면 사용자 환경에 분명히 부정적인 영향을 미칩니다. 다음 조건에 해당하는 프로세스가 가시적 프로세스로 간주됩니다.

    • User가 현재 알고 있는 작업을 하는 프로세스
    • Activity - onPause (스크린에는 보이지만 포그라운드가 아닐때)
    • Service.startForeground를 통해 포그라운드 서비스가 실행 중일 때
    • visible process는 매우 중요한 것으로 간주되어, 모든 foreground process를 실행하느라 메모리가 부족한게 아니라면 종료 시키지 않는다. 

    1. Activity가 onPause 상태에 있을 때:

    • 사용자가 앱을 사용하다가 홈 버튼을 눌러서 다른 앱을 열었다고 가정해보자. 이때 이전에 사용하던 앱은 화면에 보이진 않지만, 바로 홈 버튼을 두 번 누르면 다시 돌아갈 수 있다. 이 상태에서 앱의 Activity는 "onPause" 상태에 있게 됩니다. 화면에 보이지는 않지만, 여전히 백그라운드에서 실행되고 있는 것이다.
    •  

    2. Service가 startForeground로 실행될 때: 

    • 예를 들어, 음악 스트리밍 앱이 백그라운드에서 음악을 재생하고 있다고 한다면 사용자는 음악이 재생되고 있다는 것을 알고 있으며, 음악 재생을 제어할 수 있는 알림이 화면 상단에 보일 수 있습니다. 이때, 이 서비스는 Visible Process 상황이다.

    3. 사용자가 인지하고 있는 특정 기능을 시스템이 사용하고 있을 때:

    • 날씨 위젯이 실시간으로 날씨를 업데이트하고 있다면, 이 서비스는 사용자가 알 수 있는 형태로 작동하고 있다

     

     

    3. Service Process (서비스 프로세스)

    • Service를 유지하는 프로세스로 직접 표시되지 않지만 사용자가 관심을 가진 작업을 실행 (Foreground Service보다는 Background Service에서 데이터 업로드 혹은 다운로드 하는 것을 의미하는 것 같다)
    • 오랫동안(예: 30분 이상) 실행되고 있는 서비스는 중요도가 강등됨에 따라 이 프로세스가 캐시된 LRU 목록으로 이전될 수 있습니다. 이렇게 하면 메모리 누출 또는 기타 문제가 있는 장기 실행 서비스가 너무 많은 RAM을 소비하여 시스템이 캐시된 프로세스를 효과적으로 활용하지 못하게 하는 상황을 방지할 수 있습니다.

     

    4. cached process

    • 현재 필요로 하지 않는 Process로 메모리가 필요한 경우 언제든지 해당 Process를 종료할 수 있다.
    • Activity - onStop()
    • 해당 프로세스를 종료해도 사용자 환경에 영향을 주지 않는다. 원하는 Activity를 재실행 시켰을 경우 savedStateInstance로 데이터가 복원된다.

     

Designed by Tistory.