본문 바로가기
Android

인사이드 안드로이드 11 자바 시스템 서비스 동작 분석 (1)

by OKOK 2021. 5. 19.

액티비티 매니저 서비스르 통해 자바 시스템 서비스가 안드로이드 프레임워크 내에서 어떻게 동작하는지 확인

 

11.1 액티비티 매니저 서비스

자바 시스템 서비스의 일종인 코어 플랫폼 서비스로서 안드로이드 앱 컴포넌트인 액티비티, 서비스, 브로드캐스트 리시버 등을 생성하고, 이들의 생명주기를 관리하는 역할을 함. 액티비티 매니저 서비스는 어떻게 RemoteService를 실행할까. 안드로이드의 모든 자바 기반 프로세스는 Zygote에 의해 생성됨. 액티비티 매니저 서비스는 Zygote를 이용해 서비스를 실행할 프로세스를 생성함. 그런 다음 새로 생성된 프로세스 상에서 앱이 요청한 RemoteService를 실행함.

안드로이드 앱은 startService()나 bindService() API를 통해 앱 서비스를 생성함. 앱으로부터 startService)를 통해 서비스 실행 요청을 받은 액티비티 매니저 서비스는 ActivityThread생성을 요청함. 

 

Start Service 버튼을 누르면 이벤트 핸들러가 호출됨. 단순히 인텐트를 인자로 startService()를 호출함. 안드로이드 앱 컴포넌트는 인텐트라는 메시지를 통해 활성화됨. 인텐트를 이용해서 실행하고자 하는 서비스의 클래스명을 명시적으로 지정해서 컴포넌트를 실행할 수 있음. com.example.android.apis.app.REMOTE_SERVICE 액션을 지정. 암시적인 인텐트에 포함된 액션을 전달받은 안드 프레임워크는 해당 액션을 처리하는 가장 적합한 액티비티나 서비스를 검색한 다음 이를 실행함. 암시적인 인텐트를 수신한 안드 프레임워크는 인텐트에 포함된 액션 정보를 통해 실행해야 할 서비스가 RemoteService임을 확인할 수 있는 것.

 

동일한 프로세스 내의 스레드 간 메시지 통신을 위해 Looper, prepareMainLooper() 메시지 큐를 생성함. 안드 메시지 큐는 동일 프로세스 안에서 여러 스레드 간에 메시지를 전달하는데 쓰임. 프로세스 간에 메시지를 전달하기 위해서는 인텐트를 사용해야 함. 각 안드 스레드는 메시지 큐를 처리하기 위해 자신만의 Looper를 지님. 앱의 메인 Looper를 생성할 때 사용하는 메서드로 동작 방식은 같음. 

 

11.3 정리

액티비티가 액티비티 매니저 서비스를 통해 어떻게 앱 서비스를 생성하는지 살펴봄.

댓글