안드로이드 4대 컴포넌트로는 Activity, Service, Broadcast Receiver, Content Provider가 있으며 각각의 컴포넌트는 인텐트(intent)를 통해 상호작용한다.

- 각 컴포넌트들은 하나의 독립적인 형태로 존재
- 각 컴포넌트들은 고유의 기능을 수행
- 각 컴포넌트들은 인텐트를 통해 서로 상호 작용
1. Activity
- 액티비티는 사용자가 Application과 상호작용하며 실제로 사용자에게 보이는 화면(UI)를 의미한다.
- Application에 화면이 하나도 없으면, 사용자와 상호작용 할 수 없으므로 적어도 하나의 액티비티는 반드시 필요하다.
- 다른 Application의 액티비티 역시 인텐트를 통해 불러올 수 있다.
- 하나 이상의 View 또는 ViewGroup을 가지고 있어야 한다. 여기서 View는 화면에서 눈에 보이는 것들 예를 들어 Text, Button, Image 등을 의미하며, ViewGroup은 Layout을 의미한다.
2. Service
- 서비스는 액티비티와 반대로 직접적으로 상호작용하지 않는 요소이다.
- 네트워크와 연동이 가능하다.
- 별도의 UI를 가지지 않으며 Background에서 어떠한 작업을 처리하기 위해 이용한다.
- 액티비티와 서비스는 UI 스레드라고 불리는 동일한 어플리케이션 스레드로 실행된다.
- 어플리케이션이 종료되어도 이미 시작된 서비스(Service)는 백그라운드(Background)에서 계속 동작한다.
3. BroadCast Receiver
안드로이드 OS로부터 발생하는 각종 이벤트와 정보를 받아와 핸들링하는 컴포넌트.
사용자 안드로이드 디바이스의 시스템 부팅시 앱 초기화, 네트워크 끊김 등등 특수한 이벤트에 대한 처리나 배터리 부족 알림, 문자 수신과 같은 정보를 받아 처리를 해야할 필요가 있을 때 동작한다.
- 거의 대부분 UI를 가지지 않는다.
- 안드로이드 디바이스의 특수한 상황에 대응하기 위해 사용된다.
- 특정한 상황을 제외하고는 브로드캐스트는 시스템에서 시작한다.
4. Content Provider
데이터를 관리하고 다른 어플리케이션의 데이터를 제공하는데 사용되는 컴포넌트
특정한 어플리케이션이 사용하고 있는 데이터베이스(DB)를 공유하기 위해 사용하며 어플리케이션 간의 데이터 공유를 위해 표준화된 인터페이스를 제공한다.
- SQLite DB / Web / 파일 입출력 등을 통해서 데이터를 관리한다.
- 외부 어플리케이션이 현재 실행 중인 어플리케이션 내에 있는 DB에 함부로 접근하지 못하게 할 수 있으면서 나 자신이 공개하고 공유하고 싶은 데이터만 공유할 수 있도록 도와준다.
- 작은 데이터들은 intent로 어플리케이션끼리 데이터를 서로 공유가 가능하지만 content Provider는 음악 또는 사진 파일 등과 같이 용량이 큰 데이터들을 공유하는데 적합하다.
- 프로바이더는 데이터의 Read(읽기), Write(쓰기)에 대한 퍼미션이 있어야 어플리케이션에 접근이 가능하다.
- 데이터베이스에서 흔히 사용되는 CRUD(Create, Read, Update, Delete)원칙을 준수한다.
Intent(인텐트)
Intent란 어플리케이션 컴포넌트 간에 작업 수행을 위한 정보를 전달하는 역할을 하며 통신수단이라도 보면 된다.
Intent를 가장 많이 사용하는 예로는 액티비티 간의 화면 전환이 있다.
- 서로 독립적으로 동작하는 4가지 컴포넌트들 간의 상호 통신을 위한 장치
- 컴포넌트에 액션(Action), 데이터(Data) 등을 전달
- 인텐트를 통하여 다른 어플리케이션의 컴포넌트를 활성화시킬 수 있다.
참조 : https://velog.io/@jojo_devstory/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-Android-4%EB%8C%80-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8