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.xml
android:persistent="true"
- 열기 스레드가 서비스에 시간이 많이 걸리는 작업을 할, 서비스 프로세스 판단됩니다.
startForeground()
프런트 데스크를 시작, 사용하는 기억stopForeground()
폐쇄.- 와 상호 작용 티피 케이션, 프로세스가인지 과정이 될 수 있습니다.
- 방송은 빈 처리되는 방지 할 수 있습니다.
- 프로세스 (그냥 생각) 활성 상태를 유지하기 위해 기본 프로세스를 사용합니다.
참고 :
안드로이드 앱 플랫폼 프로세스 우선 순위
안드로이드 합산 - 프로세스 우선 순위 및 우선 순위 방법을 가능한 한 법의 (서비스 불멸을 개선하기 위해