Android 프로세스 우선 순위 및 LowMemoryKiller 메커니즘 - 1

3245 단어
프로세스 라이프 사이클
Android 시스템은 응용 프로그램을 최대한 오래 유지하고 사용자가 응용 프로그램을 종료한 후에 프로세스kill을 자발적으로 제거하지 않으면 이 프로세스는 시스템에 캐시되어 사용자가 앱을 다시 시작할 때 시작을 가속화할 것이다.켜진 애플리케이션이 많아지면서 시스템 메모리가 부족해지고(Out of Memory) 새 프로세스를 만들거나 더 중요한 프로세스를 실행하기 위해서는 결국 메모리를 회수하기 위해 이전 프로세스를 제거해야 합니다.어떤 프로세스를 유지하거나 종료할지 결정하기 위해 시스템은 프로세스에서 실행 중인 구성 요소와 이 구성 요소의 상태에 따라 모든 프로세스를 '중요성 차원 구조' 에 넣는다.필요할 때 시스템은 우선 중요성이 가장 낮은 프로세스를 제거하고 그 다음에 중요성이 약간 떨어지는 프로세스를 제거하여 시스템 자원을 회수한다.LowMemoryKiller 메커니즘은 시스템이 프로세스를 죽이고 어떤 프로세스를 죽여야 하는지 판단하는 메커니즘입니다.
시스템 내 프로세스 우선 순위는 5 단계로 나뉜다.
  • 프론트 데스크톱 프로세스(Foreground process) 사용자의 현재 작업에 필요한 프로세스입니다.프로세스가 다음 조건 중 하나를 충족하면 프런트 데스크톱 프로세스로 간주됩니다.
  • 사용자가 상호작용하고 있는 Activity (호출된 Activity의 onResume () 방법 포함)
  • 사용자가 상호 작용하는 Activity
  • 에 연결된 서비스 포함
  • 프론트 데스크톱에서 실행 중인 서비스 (startForeground ()
  • 포함
  • 라이프 사이클 리셋을 실행하는 서비스(onCreate(), onStart() 또는 onDestroy()
  • 포함
  • onReceive () 방법을 실행하는 BroadcastReceiver
  • 보이는 프로세스(Visible process)는 프런트 데스크톱 구성 요소가 없지만 화면에서 사용자가 볼 수 있는 내용의 프로세스에 영향을 줄 수 있습니다.프로세스가 다음 조건 중 하나를 충족하면 표시되는 프로세스로 간주됩니다.
  • 위탁 관리는 프론트에 있지 않지만 사용자에게 보이는Activity(호출된onPause() 방법).예를 들어 프론트 데스크톱의 Activity가 대화상자를 시작하여 그 다음에 이전 Activity를 표시할 수 있도록 한다면 이런 상황이 발생할 수 있다.
  • 보이는 서비스(또는 프런트)Activity에 연결된 서비스를 호스팅합니다.

  • 모든 프론트 데스크톱 프로세스가 동시에 실행되기 위해 종료되어야 하는 경우를 제외하고는 프로세스가 종료되지 않는다는 것을 알 수 있습니다.
  • 서비스 프로세스(Service process)가 이미 사용startService() 방법으로 시작한 서비스를 실행하고 있으며 위의 두 상위 클래스 프로세스에 속하지 않습니다.비록 서비스 프로세스는 사용자가 본 내용과 직접적인 관련이 없지만, 보통 사용자가 관심을 가지는 조작을 실행한다. 예를 들어 백엔드에서 음악을 재생하거나 인터넷에서 데이터를 다운로드하는 것이다.따라서 모든 프론트 데스크톱 프로세스와 보이는 프로세스가 동시에 실행될 수 있도록 메모리가 부족하지 않으면 시스템은 서비스 프로세스를 실행 상태로 유지합니다.
  • 백엔드 프로세스(Background process)는 현재 사용자에게 보이지 않는Activity 프로세스(Activity가 호출된onStop() 방법을 포함합니다.이러한 프로세스는 사용자 체험에 직접적인 영향을 주지 않기 때문에 시스템은 언제든지 메모리를 회수하여 프론트 데스크톱 프로세스, 보이는 프로세스 또는 서비스 프로세스에 사용하도록 할 수 있다.일반적으로 많은 백그라운드 프로세스가 실행되기 때문에 LRU (최근 최소 사용) 목록에 저장되어 사용자가 최근에 본 Activity를 포함하는 프로세스가 마지막으로 종료되었는지 확인합니다.만약에Activity가 생명주기 방법을 정확하게 실현하고 현재 상태를 저장한다면, 프로세스를 종료하는 것은 사용자 체험에 뚜렷한 영향을 미치지 않을 것이다. 왜냐하면 사용자가 이Activity를 내비게이션할 때Activity는 모든 보이는 상태를 회복하기 때문이다.상태 저장 및 복원에 대한 자세한 내용은 Activity 설명서를 참조하십시오.

  • 비어 있는 프로세스(Empty process)는 활성 응용 프로그램 컴포넌트가 없는 프로세스입니다.이 프로세스를 보존하는 유일한 목적은 다음에 구성 요소를 실행하는 데 필요한 시작 시간을 단축하기 위해 캐시로 사용하는 것이다.전체 시스템 자원이 프로세스 캐시와 하위 엔드 캐시 사이의 균형을 유지하기 위해 시스템은 종종 이러한 프로세스를 중지한다.
    프로세스 우선 순위에 대한 주의사항:
  • Android는 프로세스에서 현재 활성 어셈블리의 중요도에 따라 프로세스가 도달할 수 있는 최상위 수준으로 평가합니다.예를 들어 어떤 프로세스가 서비스와 보이는 Activity를 위탁 관리한다면 이 프로세스는 서비스 프로세스가 아니라 보이는 프로세스로 평가됩니다.
  • 또한 한 프로세스의 등급은 다른 프로세스의 의존에 따라 높아질 수 있다. 즉, 다른 프로세스에 서비스되는 프로세스의 등급은 서비스하는 프로세스보다 낮지 않다.예를 들어, 프로세스 A의 컨텐트 공급자가 프로세스 B의 클라이언트에 서비스를 제공하거나 프로세스 A의 서비스가 프로세스 B의 구성 요소에 바인딩된 경우 프로세스 A는 항상 프로세스 B와 마찬가지로 중요합니다.
  • 서비스를 실행하는 프로세스는 위탁 관리 백엔드 Activity의 프로세스보다 수준이 높기 때문에 장시간 실행하는 Activity는 이 작업에 서비스를 시작하는 것이 가장 좋다. 간단하게 작업 라인을 만드는 것이 아니라Activity보다 오래 지속될 수 있을 때 특히 그렇다.예를 들어 그림을 사이트에 업로드하고 있는 Activity는 업로드를 실행하기 위해 서비스를 시작해야 하며, 사용자가 Activity를 종료하더라도 백엔드에서 업로드 작업을 계속할 수 있다.서비스를 사용하면 Activity와 상관없이 최소한 서비스 프로세스 우선 순위가 보장됩니다.마찬가지로 방송 수신기도 단순히 지루한 조작을 라인에 넣는 것이 아니라 서비스를 사용해야 한다.

  • NEXT: http://www.jianshu.com/p/cd6510aa9150

    좋은 웹페이지 즐겨찾기