ActivityManagerService 이해하기
개요
ActivityManagerService(AMS)
는 Android 시스템의 핵심 서비스 중 하나로, 애플리케이션의 생명 주기 관리, 프로세스 관리, 백그라운드 실행 정책 등을 담당합니다. AMS는 system_server
프로세스 내에서 실행되며, Android 운영체제의 애플리케이션 관리 및 리소스 할당을 책임집니다.
본 글에서는 ActivityManagerService
의 역할, 핵심 구성 요소, 그리고 AOSP 코드를 활용한 주요 동작 원리에 대해 설명하겠습니다.
ActivityManagerService의 역할
1. 프로세스 및 태스크 관리
AMS는 각 애플리케이션 프로세스를 관리하며, 필요에 따라 프로세스를 생성하거나 종료합니다. 또한, 태스크(Task)와 관련된 스택(stack) 관리 기능도 제공합니다.
2. 애플리케이션 생명주기 관리
애플리케이션의 Activity
, Service
, BroadcastReceiver
등의 생명 주기를 관리합니다. 사용자의 상호작용에 따라 포그라운드 또는 백그라운드 상태를 전환합니다.
3. 백그라운드 제한 정책 적용
Android 8.0(Oreo)부터 도입된 백그라운드 실행 제한 및 작업 스케줄링(JobScheduler
)을 제어합니다.
4. 시스템 리소스 관리
AMS는 Android 시스템에서 사용 가능한 리소스를 모니터링하며, 메모리 부족 시 Low Memory Killer
등을 통해 프로세스를 종료하는 역할을 수행합니다.
5. ANR (Application Not Responding) 감지 및 처리
애플리케이션이 일정 시간 동안 응답하지 않을 경우 ANR
을 감지하고 이를 처리합니다.
AMS의 주요 구성 요소
1. ProcessRecord
각 애플리케이션 프로세스의 상태 정보를 담고 있는 클래스입니다. 프로세스의 UID, PID, 현재 실행 중인 Activity
목록 등을 관리합니다.
2. ActivityStackSupervisor
여러 개의 ActivityStack
을 관리하며, 현재 실행 중인 Activity
의 상태를 추적하고 전환하는 역할을 합니다.
3. TaskRecord
태스크(Task) 단위의 실행 정보를 담고 있는 클래스입니다. 여러 개의 Activity
를 그룹화하여 관리합니다.
4. BroadcastQueue
브로드캐스트 메시지를 관리하는 큐입니다. AMS는 시스템 및 앱에서 발생하는 브로드캐스트를 Foreground
및 Background
큐를 통해 관리합니다.
5. OomAdjuster
메모리 관리 및 Out of Memory(OOM)
조정을 담당하는 컴포넌트로, 시스템의 메모리 상태를 고려하여 프로세스의 중요도를 조정합니다.
AOSP 코드 분석: AMS의 초기화 과정
ActivityManagerService
는 SystemServer
프로세스 내에서 초기화됩니다. 아래는 AOSP 코드에서 AMS
가 생성되는 과정입니다.
1. SystemServer에서 AMS 생성
private void startBootstrapServices() {
// ActivityManagerService 생성
mActivityManagerService = new ActivityManagerService(mSystemContext);
mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
mActivityManagerService.initPowerManagement();
mActivityManagerService.setInstaller(installer);
}
SystemServer.java
에서 ActivityManagerService
객체를 생성하고 초기화합니다.
2. AMS의 실행
public static ActivityManagerService main(Context systemContext) {
ActivityManagerService service;
service = new ActivityManagerService(systemContext);
service.start();
return service;
}
ActivityManagerService.main()
메서드를 통해 AMS가 실행됩니다.
3. AMS의 주요 루프
AMS는 시스템 이벤트를 감지하고 처리하기 위해 MessageQueue
를 통해 이벤트 루프를 실행합니다.
while (true) {
Message msg = mHandler.obtainMessage();
msg.target = this;
msg.sendToTarget();
}
이 루프를 통해 애플리케이션 프로세스 및 생명 주기 관리 작업이 수행됩니다.
AMS의 주요 기능 분석
1. 프로세스 관리 및 OOM 조정
AMS는 실행 중인 모든 프로세스의 상태를 감시하고 OomAdjuster
를 사용하여 중요도를 조정합니다.
void updateOomAdjLocked(ProcessRecord app) {
int adj = computeOomAdjLocked(app);
app.setAdj(adj);
}
이 코드를 통해 OOM
조정이 수행됩니다.
2. Activity 생명 주기 관리
AMS는 startActivity()
메서드를 통해 새로운 Activity
를 실행합니다.
public int startActivity(IApplicationThread caller, Intent intent) {
return mActivityStarter.startActivity(caller, intent);
}
3. ANR 감지 및 처리
AMS는 애플리케이션의 응답 속도를 모니터링하여 ANR
을 감지합니다.
void appNotResponding(ProcessRecord app) {
Slog.w(TAG, "ANR detected in process: " + app.processName);
showAnrDialog(app);
}
결론
ActivityManagerService
는 Android 운영체제의 핵심 서비스로, 애플리케이션의 생명 주기, 프로세스, 태스크를 관리하는 중요한 역할을 합니다. AOSP의 AMS 코드를 분석하면 프로세스 및 태스크 관리의 세부적인 동작 원리를 이해하는 데 도움이 됩니다.
'Android > Framework' 카테고리의 다른 글
Android PackageManagerService 분석 (0) | 2025.04.10 |
---|---|
Android WindowManagerService 이해하기 (0) | 2025.04.09 |
Android Framework의 개념 및 역할 (0) | 2025.04.07 |
Native 코드와 Android Framework 연동 (0) | 2025.04.06 |
Android NDK(Native Development Kit) 개요 및 활용 (0) | 2025.04.05 |