[ 참고한 출처 ]
[ 안드로이드 App의 구성 ]
안드로이드 앱은
- 액티비티 (Activity)
- 서비스 (Service)
- 브로드캐스트 수신자 (Broadcast Receiver)
- 내용 제공자 (Content Provider)
4가지로 구성 돼 있습니다.

각 구성요소들은 독립적인 역할을 가지며, Intent(인텐트)를 이용하여 상호작용합니다.
>> [ 액티비티 (Activity) ]
어플리케이션의 기능을 갖는 단일의 독립적인 모듈로, 사용자와의 상호작용을 담당하는 인터페이스입니다.
안드로이드 어플리케이션은 반드시 하나 이상의 액티비티를 포함하며, 액티비티는 생명주기(Life Cycle) 관련 메서드들을 이용하여 원하는 기능들을 구현할 수 있습니다.
- Intent(인텐트)를 통해 다른 어플리케이션의 액티비티 호출이 가능합니다.
- 2개 이상의 액티비티를 동시에 Display 할 수 없습니다.
- 1개 이상의 뷰, 또는 뷰 그룹을 포함합니다.
- 액티비티 내에 Fragment(프래그먼트)를 추가하여 화면을 분할시킬 수 있습니다.

[ 특징 ]
- 안드로이드 Activity 클래스의 서브 클래스로 생성되어야함.
- 다른 액티비티와는 완전 독립적으로 구현(다른 액티비티의 메서드를 직접 호출 불가).
- 인텐트(Intent) 와 콘텐트 제공자(Content Provider) 를 이용하여 액티비티 공유 가능.
>> [ 서비스 (Service) ]
서비스는 사용자와 직접적인 상호작용을 하는 요소는 아닙니다.
백그라운드에서 어떠한 작업을 처리하기 위해 사용합니다
서비스는 메인 스레드에서 동작하기 때문에 서비스 내에서 별도의 스레드를 생성하여 작업을 처리해야 합니다.
- 네트워크(Network)와 연동이 가능합니다.
- 별도의 UI를 가지지 않으며 백그라운드에서 수행됩니다.
- 액티비티와 서비스는 UI스레드라고 불리는 동일한 애플리케이션 스레드로 실행됩니다.
- 애플리케이션이 종료되어도 이미 시작이 된 서비스(Service)는 백그라운드(Background)에서 계속 동작합니다.
>> [ 방송 수신자 (Broadcast Receiver) ]
안드로이드 OS로 부터 발생하는 각종 이벤트와 정보를 받아와 핸들링하는 컴포넌트입니다.
사용자 안드로이드 디바이스의 시스템 부팅시 앱 초기화, 네트워크 끊김 등 특수한 이벤트에 대한 처리나 배터리 부족 알림, 문자 수신과 같은 정보를 받아 처리를 해야 할 필요가 있을 때 동작합니다.
즉, 안드로이드 OS에서 메신저앱 또는 문자 메시지가 오면 모든 앱에 "메시지가 왔다"라는 하나의 정보를 방송(BroadCast)을 합니다.
이 메시지를 받기 위해 브로드캐스트 리시버를 구현하면 되며 해당 정보가 오면 특정 이벤트를 처리할 수가 있습니다.
- 대부분 UI를 가지지 않습니다.
- 안드로이드 디바이스의 특수한 상황에 대응하기 위해 사용됩니다.
- 특정한 상황을 제외하고는 브로드캐스트는 시스템에서 시작합니다.
>> [ 콘텐츠 제공자 (Content Provider) ]
데이터를 관리하고 다른 어플리케이션의 데이터를 제공하는데 사용되는 컴포넌트입니다.
특정한 애플리케이션이 사용하고 있는 데이터베이스(DB)를 공유하기 위해 사용하며 애플리케이션 간의 데이터 공유를 위해 표준화된 인터페이스를 제공합니다.
- SQLite DB / Web / 파일 입출력 등을 통해서 데이터를 관리합니다.
- 외부 애플리케이션이 현재 실행 중인 애플리케이션 내에 있는 데이터베이스(DB)에 함부로 접근하지 못하게 할 수 있으면서 나 자신이 공개하고 공유하고 싶은 데이터만 공유할 수 있도록 도와줍니다.
- 작은 데이터들은 인텐트(Intent)로 애플리케이션끼리 데이터를 서로 공유가 가능하지만 콘텐츠 프로바이더는 음악 또는 사진 파일 등과 같이 용량이 큰 데이터들을 공유하는데 적합합니다.
- 프로바이더는 데이터의 Read(읽기), Write(쓰기)에 대한 퍼미션이 있어야 애플리케이션에 접근이 가능합니다.
- 데이터베이스에서 흔히 사용되는 CURD(Create, Read, Update, Delete) 원칙을 준수합니다.
>> [ 인텐트 (Intent) ]
어플리케이션의 컴포넌트간에 작업 수행을 위해 정보를 전단하는 역할로 통신 수단이라고 생각하면 됩니다.
인텐트를 가장 많이 사용하는 경우는 액티비티간의 화면 전환(이동)이 있습니다.
인텐트는 컴포넌트 A가 컴포넌트 B를 호출할 때 필요한 정보를 가지고 있으며, 이 정보에는 호출 대상이 되는 컴포넌트 B의 이름이 명시적으로 표시가 됨과 동시에 속성(Attribute)들이 암시적으로 표시되기도 합니다.
그리고 호출된 컴포넌트 B가 호출한 컴포넌트 A로 어떠한 결과를 전달할 때도 인텐트가 사용이 됩니다.