티스토리 뷰
안드로이드 4대 컴포넌트
- 안드로이드 앱은 독립된 형태로 존재하며, 고유의 기능을 수행하는 Component(컴포넌트)로 구성되어있다
- Activity, Service, Broadcast Receiver, Content Provider 4가지 유형으로 존재한다
- 각 컴포넌트는 Intent를 통해 서로 상호작용한다
✔️ Activity (액티비티)
- UI를 담당하는 컴포넌트이며 사용자와의 상호작용을 담당한다
- 모든 안드로이드 어플리케이션은 반드시 하나 이상의 Activity를 가진다
- LifeCycle 메소드를 재정의하여 원하는 기능을 정의할 수 있다
- 각 Acitivity는 Manifest에 등록되어 있어야 한다
- 하나 이상의 view 또는 ViewGroup을 가질 수 있다
- 두 개의 Activity를 동시에 화면에 보이게 할 수 없다
- Activity 안에는 Fragment를 붙혀 화면을 분할할 수 있다
✔️ Service (서비스)
- 백그라운드에서 실행되는 작업을 위한 컴포넌트로, 오랫동안 실행되는 작업이나 원격 프로세스 작업을 수행하기 위해 사용한다
- UI를 가지지 않는다
- 한 번 시작된 서비스는 앱이 종료되어도 계속 백그라운드에서 동작한다
- 모든 서비스는 Service의 하위 클래스로 구현된다
- 네트워크와 연동하여 데이터를 가져올 수 있다
- Activity와 Service는 동일한 어플리케이션 스레드인 UI 스레드에서 실행된다
- ex) 스트리밍 앱에서 음악을 백그라운드로 재생, 다른 작업을 수행하며 파일 다운로드 진행
✔️ Broadcast Receiver (방송 수신자)
- 안드로이드 OS에서 발생하는 다양한 이벤트 정보를 받아 반응하는 컴포넌트이다
- 수신기를 통해 디바이스의 상황을 감지하고 적절한 작업을 수행한다
- 대부분 UI를 가지지 않는다
- BroadcastReceiver의 하위 클래스로 구현된다
- 대다수의 브로드캐스트는 서비스에서 발생한다 ex) 배터리 부족 알림, 캡쳐 알림, 시스템 부팅, 문자/전화 수신
- 앱도 브로드캐스트를 시작할 수 있다 ex) 다른 앱에서 기기에 데이터 다운로드를 완료했다는 알림
✔️ Content Provider (콘텐츠 제공자)
- 데이터를 관리하고 다른 어플리케이션 데이터를 제공하는 컴포넌트이다
- 특정 어플리케이션이 가지고 있는 DB를 공유하기 위해 사용하며 표준화된 인터페이스를 제공한다
- 파일 시스템, SQLite 데이터베이스, 웹상에 저장된 데이터를 관리한다
- 콘텐츠 제공자를 이용해 다른 앱의 데이터를 쿼리하거나, 허용할 경우 수정도 가능하다
- 인텐트로 공유가능한 데이터 이외에 음악 또는 사진 파일과 같은 용량이 큰 데이터 공유에 적합하다
- 콘텐츠 제공자가 앱에 접근하려면 Read, Write 권한이 필요하다
✔️ Intent (인텐트)
- 위의 네가지 구성요소 중 Activity, Service, Broadcast Receiver 세가지는 비동기식 메세지인 인텐트로 활성화된다
- 인텐트란 앱 컴포넌트가 무엇을 할 것인지 액션과 데이터를 전달하는 메세지 객체이다
- Activity 활성화
- startActivity() 또는 startActivityForResult()로 Intent를 전달
- Service 활성화
- 초기 안드로이드에서는 Intent를 startService()에 또는 bindService()에 전달
- Android 5.0 (API 레벨 21) 이상에서는 JobScheduler 클래스를 사용하여 작업 예약
- Broadcast Receiver 활성화
- sendBroadcast(), sendOrderedBroadcast() 또는 sendStickyBroadcast() 등의 메소드에 Intent 전달
- Content Provider 쿼리 수행
- ContentResolver에서 query() 호출
App Manifest
- 모든 어플리케이션의 루트에는 AndroidManifest.xml 파일이 존재한다
- 매니페스트 파일에 안드로이드 시스템에 대해 다음과 같은 내용을 선언해야한다
- 앱의 패키지 이름
- 위의 4대 컴포넌트를 포함하는 앱의 구성요소 -> 각 파일 클래스의 이름과 같은 기본 속성과 인텐트 필터 등을 정의
- 해당 앱에 필요한 액세스 권한
- 앱에 필요한 소프트웨어 또는 하드웨어 기능
- 앱이 링크되어야하는 API 라이브러리
- 앱이 요구하는 최소 API 레벨
🕊참고자료
'Android' 카테고리의 다른 글
[Android] 안드로이드 스레드 (Android Thread) (0) | 2020.06.24 |
---|---|
[Android] 안드로이드 Activity와 Fragment의 생명주기 (0) | 2020.06.23 |
[Android & kotlin] AAC(Android Architecture Components) - Room (0) | 2020.06.22 |
[kotlin] DI 의존성 주입 - koin 사용하기 (0) | 2020.06.14 |
[Android & kotlin] AAC(Android Architecture Components) - ViewModel (0) | 2020.06.04 |