Why should I know this?

Android 파헤치기 - Launching Application 본문

Knowledge/Android

Android 파헤치기 - Launching Application

die4taoam 2019. 2. 18. 22:53
Android 파헤치기


0. 시작하기 전에...
'Android 파헤치기'에서 다루고자 하는 것은 Android라는 오픈소스를 구성하는 Stack 중에 가상머신(현재는 Runtime으로 대체되었다) 자체이다. 그러므로 응용 개발이나 프레임워크 개발을 하시는 분들에게 유용한 정보가 많지 않을 수도 있다.


1. Android의 어플리케이션 구동 구조
Android의 Application이 구동하는 구조는 다소 복잡하다. 이렇게 복잡한 구성을 갖게 된 이유는 Android가 OS의 필요성에 따라 여러 상태로 전환되야 하기 때문이다. 그리고 Android의 응용 어플리케이션은 가상머신에서 동작하기 때문에 가상머신을 Process에 녹여내는 기술도 함께 포함이 되어있다.

이 부분은 굉장히 재미있는 요소가 많은데 예를들어 instrumentation이라는 클래스는 현재 어플리케이션의 예약 메서드 onCreate, onStart 등을 호출할 수 있도록 설계된 클래스이다. Android의 Test-Framework들은 이 클래스를 통해 타겟프로그램에 원하는 메소드를 호출하는 등으로 마음껏 제어를 할 수 있게 되어있다.




구조는 복잡하지만 설명은 간단하다. 


Android에서 새 어플리케이션을 구동시킨다?

그러면 어플리케이션이 실행되면서 동시에 Android OS의 Native Process인 Manager에게 attach요청을 보낸다. 그리고 잠수탄다. Manager는 attach 요청을 받으면 요청을 보낸 어플리케이션 프로세스에 binding을 한다. 요컨데 이 과정이 바로 Android OS가 대상 Application의 onCreate 함수를 호출 할 수 있게 되는 인터페이스 구성 단계인 것이다.


binding 시에는 어플리케이션에 Application 클래스가 존재하면 Application의 새 인스턴스를 만든뒤 해당 인스턴스의 attachBaseContext메소드를 호출하여 실행 컨텍스트를 대상 어플리케이션으로 넘기게 된다.






Comments