안드로이드의 4대 컴포넌트는 Activity, Service, BroadcastReceiver, ContentProvider로 구성되어 있습니다. 어플리케이션을 만들 때 주요 구성요소로 인텐트를 통해서 상호 통신을 합니다. 즉, Activity에서 다른 구성요소를 호출할 때는 인텐트를 거쳐야 한다는 것입니다. 또한, 각 컴포넌트들은 하나의 독립적인 형태로 존재하며, 고유의 기능을 수행합니다.
1. Activity
Activity는 사용자와 상호작용하는 어플리케이션의 단일 화면으로 모든 안드로이드 어플리케이션은 Activity로 구성되어 있습니다. 즉, 사용자와 상호작용을 담당하는 인터페이스라고 할 수 있습니다. 안드로이드 어플리케이션은 반드시 하나 이상의 Activity를 포함하고 있으며, 생명 주기 관련 메서드들을 재정의하여 원하는 기능들을 구현할 수 있습니다.
- 인텐트를 통해 다른 어플리케이션의 Activity를 호출할 수 있습니다.
- 2개 이상의 Activity를 동시에 보여줄 수 없습니다.
- 1개 이상의 View 또는 ViewGroup을 포함합니다.
- 반드시 어플리케이션에는 1개 이상의 Activity가 포함됩니다.
- Activity 내에 fragment를 추가하여 화면을 분할시킬 수 있습니다.
2. Service
Service는 흔히, 백그라운드에서 작업을 처리하기 위해 사용합니다. PC를 예로 든다면 백그라운드에서 동작하는 서비스 프로그램과 동일하며, 안드로이드 모바일에서는 어플리케이션을 사용하면서 유튜브 또는 음원 스트리밍 앱을 사용하거나, 다른 작업을 하면서 파일을 다운로드 받을 때 서비스를 사용합니다.
서비스는 사용자의 인터페이스(UI, 화면)를 방해하지 않고 눈에 보이지 않는 곳에서 처리하기 때문에 별도의 스레드에서 동작하다고 오해하는 경우가 있습니다.
하지만, Service는 메인 스레드에서 동작하기 때문에 Service내에서 별도의 스레드를 생성하여 작업을 처리해야 합니다. 만약, 그렇지 않을 경우, 비정상 종료(ANR)이 발생할 수 있습니다.
- 네트워크와 연동이 가능합니다.
- 별도의 UI를 가지지 않으며, 백그라운드에서 수행됩니다.
- Activity와 Service는 메인 스레드에서 동일하게 실행됩니다.
- 어플리케이션이 종료되어도 이미 시작이 된 Service는 백그라운드에서 계속 동작합니다.
3. BroadCast Receiver
BroadCast Receiver는 안드로이드 OS로부터 발생하는 각종 이벤트와 정보를 받아와 핸들링하는 컴포넌트입니다. 디바이스의 시스템 부팅시, 앱 초기화, 네트워크 끊김 등 특수한 이벤트에 대한 처리나 알림과 같은 정보를 받아 처리를 해야할 때 동작합니다.
즉, 안드로이드 OS에서 메신저 앱 또는 문자 메시지가 오면 모든 앱에 "메시지가 왔다"라는 하나의 정보를 BroadCast합니다. 이 메시지를 받기 위해 BroadCast Receiver를 구현하면 되며, 해당 정보가 오면 특정 이벤트를 처리할 수 있습니다.
- 거의 대부분 UI를 가지지 않습니다.
- 안드로이드 디바이스의 특수한 상황에 대응하기 위해 사용됩니다.
- 특정한 상황을 제외하고는 BroadCast는 시스템에서 시작합니다.
4. Content Provider
Content Provider는 데이터를 관리하고, 다른 어플리케이션의 데이터를 제공하는데 사용되는 컴포넌트입니다. 특정한 어플리케이션이 사용하고 있는 DB를 공유하기 위해 사용하며 어플리케이션 간의 데이터 공유를 위해 표준화된 인터페이스를 제공합니다.
- SQLite DB / Web / 파일 IO 등을 통해서 데이터를 관리합니다.
- 외부 어플리케이션이 현재 실행 중인 어플리케이션 내에 있는 DB에 함부로 접근하지 못하게 할 수 있으면서, 나 자신이 공개하고 공유하고 싶은 데이터만 공유할 수 있도록 도와줍니다.
- 작은 데이터들은 인텐트를 통해 어플리케이션끼리 데이터 공유가 가능하지만, Content Provider는 음악 또는 사진 파일 등과 같은 용량이 큰 데이터들을 공유하는데 적합합니다.
- Provider는 데이터의 Read, Write에 대한 퍼미션이 있어야 어플리케이션에 접근이 가능합니다.
- DB에서 흔히 사용되는 CRUD 원칙을 준수합니다.
'Android > study_til' 카테고리의 다른 글
[AOS] Activity의 생명 주기 (0) | 2021.05.21 |
---|---|
[AOS] 안드로이드의 통신 수단 Intent (0) | 2021.05.21 |
[Android Studio] Http protocol 접속 시, 발생하는 예외발생 조치하기 (0) | 2020.12.30 |
[Android Studio] 공공데이터를 활용한 버스노선 앱 만들기 (2) | 2020.12.29 |
[Android Studio] XML파싱과 AsyncTask 이해하기 (0) | 2020.12.29 |