액티비티는 사용자와 상호작용하기 위한 시작점으로 화면 하나를 의미한다. 액티비티끼리 서로 독립되어있다.
액티비티는 다음과 같이 시스템과 앱의 주요 상호작용을 돕는다.
서비스는 백그라운드에서 앱을 계속 실행하기 위한 진입점이다. 오랫동안 실행되는 작업을 실행하거나, 원격 프로세스를 위한 작업을 수행한다. 서비스는 사용자에게 인터페이스를 제공하진 않는다.
서비스는 두 가지 유형이 있을 수 있는데, 예시로 쉽게 설명하겠다.
바인딩 된 서비스는 다른 앱에서 실행할 수 있다. 이는 서비스가 다른 프로세스에게 API를 제공해주는 것이다. 그러면 시스템은 이를 알고 있다가 프로세스 A 실행시 바인딩 된 프로세스 B도 함께 실행을 시켜준다.
서비스는 Service 하위 클래스로 구현됩니다.
안드로이드 앱에서 발생하는 시스템 또는 앱 간의 브로드캐스트 메시지를 수신하는 컴포넌트이다. 브로드캐스트 메시지는 시스템 또는 앱에서 중요한 이벤트가 발생했을 때 다른 앱이나 컴포넌트에게 알리기 위해 사용된다. Broadcast Receiver도 앱으로 들어갈 수 있는 또 다른 진입점이기 때문에 현재 실행되지 않은 앱에도 시스템이 브로드캐스트를 전달할 수 있다. 대다수의 브로드캐스트는 시스템에서 발생한다.Broadcast Receiver는 사용자 인터페이스를 표시하지 않지만, 상태 표시줄 알림을 생성하여 사용자에게 브로드캐스트 이벤트가 발생했다고 알릴 수 있다.
Broadcast Receiver는 BroadcastReceiver의 하위 클래스로 구현되며 각 브로드캐스트는 Intent 객체로 전달된다
안드로이드 앱 간의 데이터 공유와 관리를 위한 인터페이스를 제공하는 컴포넌트이다. 즉 다른 앱에서 데이터에 접근하거나 데이터를 공유하기 위해 Content Provider를 사용할 수 있습니다.
자신의 앱이 카메라 앱 내에서 사진을 캡처하는 액티비티를 시작하면, 해당 액티비티는 자신의 앱 프로세스가 아니라 카메라 앱에 속한 프로세스에서 실행된다. 그러므로 대부분의 다른 시스템에서 실행되는 앱과 달리 Android 앱은 단일한 진입 지점이 없다. 쉽게 설명하면 main에서 앱이 무조건적으로 실행된다고 보장되지 않는다.
내 앱이 다른 앱을 실행할 때, 내 앱이 실행시키는 것이 아니라 안드로이드 시스템이 실행시켜준다.
즉 다른 앱을 실행시키려면 시스템에 메시지를 전달하여 인텐트를 밝혀야 한다.
구성요소 4가지중 액티비티, 서비스, Broadcast Receiver는 인텐트를 활용한 비동기식 메시지로 활성화 된다. 인텐트는 런타임중 각 구성 요소를 서로 바인딩한다.
액티비티와 서비스의 경우, 인텐트는 수행할 작업을 정의하며, 시작되는 구성 요소가 알아야 할 것이 많이 있기는 하지만 그중에서도 작업을 수행할 데이터의 URI를 지정할 수 있다.
Broadcast Receiver의 경우, 인텐트는 단순히 브로드캐스트될 알림을 정의한다.
Content Provider의 경우 인텐트로 활성화 되지 않는다. ContentResolver가 보낸 요청의 대상으로 지정되면 활성화된다. ContentResolver는 Content Provider와 앱 사이에 자리하여, 트랙잭션을 처리하고 수행한다. 이렇게 하면 앱이 직접적으로 Content Provider와 통신하는 것이 아니기에 작업이 간소화되고 보안이 향상된다.
Android 시스템이 앱 구성 요소를 시작하려면 시스템은 우선 앱의 매니페스트 파일, AndroidManifest.xml을 읽어서 해당 구성 요소가 존재하는지 확인한다.
앱은 이 파일 안에 모든 구성 요소를 선언해야 하며, 이 파일은 앱 프로젝트 디렉토리의 루트에 있어야 한다.
뿐만아니라 매니페스트는 다음과 같은 역활을 한다