안드로이드 프로세스 우선 순위 : 낮은 수준 킬 잃었다

I. 정의

  • 안드로이드 시스템은 메모리가 부족 해제 프로그램 메모리에 일부 프로그램 (또는 프로세스)를 죽일 것이다있을 때 실행하는 데 필요를 사용합니다.
  • 프로세스의 높은 우선 순위는, 결국 반대로, 가장 낮은 우선 순위는 살인이다, 죽일 것이다.

두. 기존 공정에서 안드로이드 시스템

1.Zygote 과정

접합자, 수정란의 평균 ... 안드로이드 시스템에서 모든 시스템 서비스 및 프로세스 SystemServer 신청 절차는 접합자 포크 아웃 (사육) 과정이다.

2.App 주 과정

각 응용 프로그램이 별도의 프로세스에서 실행되고, 물론,이 과정은 프로세스 Zygote의 포크 밖으로이다. 앱 이름은 덧붙여 또한 AMS에 의해 수행 된 브로드 캐스트 전송 AMS (ActivityManagerService) 관리에 의한 프로세스의 패키지 이름입니다.

3.App 작업자 프로세스

응용 프로그램은 프로세스의 수, 특히 수 있습니다 AndroidManifest.xml활동에 대한 또는 서비스 구성 파일을 수행 android:process="". 마찬가지로, 프로세스는 AMS 관리에 의해 접합자 포크에 의해 지원된다.

4.Native 과정

가상 머신에서 안드로이드 달빅 실행은, NDK는 사용자가 C / C ++ 등 유사한 네이티브 코드 언어를 사용하여 가공 프로그램을 실행할 수 있습니다. NDK 프로세스에 의해 밖으로 포크는 기본 과정이라고합니다. 자유의 기본 고도는 할 수없는 프로세스 관리를 AMS. 또 다른이, NDK는 과정을 수행하는 데 사용할 수있는 살아 유지한다.

우선 세. 안드로이드 시스템 프로세스

우선 순위 정의의 안드로이드 시스템 프로세스 com.android.server.am.ProcessList클래스는,이 클래스는 SDK에서 찾을 수 있습니다.
주로 다음과 같은 우선 순위 정의 (oom_adj 값)에서 :

이름 설명
UNKNOWN_ADJ = 16 설정 옆으로 가장 낮은 수준의 캐시는이를 사용하도록 설정 할 수있다
CACHED_APP_MAX_ADJ = 15 활동 보이지 않는 보류 프로세스가 백그라운드 프로세스이며, 시스템 메모리 킬 부족
CACHED_APP_MIN_ADJ = 9 캐싱 과정, 비어 과정
SERVICE_B_ADJ = 8 비활성 처리
PREVIOUS_APP_ADJ = 7 공정 전환 프로세스 응용 프로그램을 전환하기 전에 저장
HOME_APP_ADJ = 6 홈 과정과 상호 작용
SERVICE_ADJ = 5 프로세스의 서비스 사용자에 미치는 영향을 알아 킬이 너무 크지 않은, 일반적으로 포함
HEAVY_WEIGHT_APP_ADJ = 4 높은 가중치 프로세스, 시스템은 백그라운드에서 실행하지만 킬 가을 않으려 고
BACKUP_APP_ADJ = 3 관리 백업 과정은 킬 오프는 나쁜 생각입니다
PERCEPTIBLE_APP_ADJ = 2 그것은 음악 플레이어로, 사용자 프로세스에 의해 인식 될 수있다
VISIBLE_APP_ADJ = 1 눈에 보이는 프로세스, 사용자는 과정을 볼 수 있지만, 반드시 전경 프로세스는이 덮여 활동이 될 수 있습니다
FOREGROUND_APP_ADJ = 0 전경 프로세스 응용 프로그램에서 실행 전경 과정
PERSISTENT_SERVICE_ADJ = -11 중요 프로세스, 시스템 또는 프로세스는 중요한 바인딩 과정
PERSISTENT_PROC_ADJ = -12 같은 전화기 등의 핵심 프로세스, 연속 공정 시스템,
SYSTEM_ADJ = -16 시스템 프로세스
NATIVE_ADJ = -17 원주민 관련 프로세스 도움말 시스템 관리

프로세스 우선 순위를보기 :

 

  //oom_adj的值就是进程的优先级
  //查看oom_adj值
  cat /proc/${pid}/oom_adj

네. 안드로이드 시스템 공통 과정

가장 낮은 우선 순위로 가장 높은에서 :

1. 전경 처리 (포어 그라운드 프로세스)

만나 다음과 같은 조건이 포 그라운드 프로세스로 간주 :

  • 활동 프로세스는 사용자와의 긍정적 인 상호 작용을 보유하고 있습니다.
  • 프로세스는 다음 조건 중 하나가 서비스 충족 보유 :
    바인딩 상호 작용 1, 및 활동을,
    2, startForeground()프론트 데스크 시작,
    서비스는 라이프 사이클 메소드를 구현하고 3, onCreate(), onStart(), or onDestroy().
  • 프로세스를 실행하면 보유 onReceive()브로드 캐스트 리시버를.

2. 볼 방법 (표시 방법)

  • 프로세스 대화창으로 차단 등, 가시광 활성을 보유 onPause()활동 상태.
  • 프로세스 및 서비스 활동 보이는 (또는 전경) 바인딩을 누르고 있습니다.

3 서비스 프로세스 (서비스 프로세스)

  • 프로세스가 보유하고 사용 startService()서비스를 개방하고, 2 개 이상의 우선 순위가 높은 서비스에 속하지 않는, 그것은 서비스 프로세스로 간주됩니다. 이러한 배경 음악, 다운로드 파일 등.

4 배경 처리 (백그라운드 프로세스)

  • 프로세스 보이지 않는 전화를 보유하고 onStop()있지만 호출하지 않은 onDestroy()활동을 백그라운드 프로세스로 간주됩니다. 그 이유는 선택하고 이동할 수있는 사용자 활동의 일부를 저장하는 것입니다. 그들은이 LRU에 저장 될리스트 (최근 최소 사용)을, 상기 초기 활동 부족 시스템 메모리는 재기록 될 수있는 연속 떨어질 수 onSaveInstanceState()는 연속되기 전에 데이터를 저장한다.

5 개 빈 과정

  • 활성 성분을 포함하지 않는 프로세스는 프로세스가 비어있는 것으로 간주됩니다. 이유는이 과정의 보존 캐싱에 대한 필요성이다.

V.은 프로세스 우선 순위를 개선

  • 구성의 AndroidManifest.xmlandroid:persistent="true"
  • 열기 스레드가 서비스에 시간이 많이 걸리는 작업을 할, 서비스 프로세스 판단됩니다.
  • startForeground()프런트 데스크를 시작, 사용하는 기억 stopForeground()폐쇄.
  • 와 상호 작용 티피 케이션, 프로세스가인지 과정이 될 수 있습니다.
  • 방송은 빈 처리되는 방지 할 수 있습니다.
  • 프로세스 (그냥 생각) 활성 상태를 유지하기 위해 기본 프로세스를 사용합니다.

참고 :

안드로이드 앱 플랫폼 프로세스 우선 순위
안드로이드 합산 - 프로세스 우선 순위 및 우선 순위 방법을 가능한 한 법의 (서비스 불멸을 개선하기 위해

재판 : https://www.jianshu.com/p/35727ad2296a 

发布了49 篇原创文章 · 获赞 2 · 访问量 8586

추천

출처blog.csdn.net/yangjunjin/article/details/105030775