앱 구성 요소
Android 앱의 필수적인 구성요소로, 각각은 시스템이나 사용자가 앱에 들어올 수 있는 진입점(EntryPoint)의 역할을 한다. 이 구성요소는 크게 Activity, Service, Broadcast Reciever, Content Provider 총 4가지로 분류된다.
1. Activity
- Activity란 앱과 사용자가 상호작용을 하기 위한 진입점이다. 앱을 실행할 때에는 앱을 전체적으로 호출하는 것이 아니라 앱의 Activity를 호출한다.
- 모든 앱에 반드시 1개 이상 존재해야 한다.
- Activity는 사용자의 상호작용을 위한 UI가 있다. 앱이 실행되면 화면이 표시되고, 사용자의 입력값을 받으며, 사용자에게 제공하고자 하는 내용을 화면에 표시한다. 사용자의 입력값을 받는다는 것은 화면을 클릭하거나 더블 클릭, 롱 클릭, 스와이프, Drag and Drop 등을 의미한다.
- 생명주기(LifeCycle)이 있다.
2. Service
- 백그라운드에서 오래 실행되는 작업 수행을 위한 Component이다.
- 사용자가 다른 앱으로 전환하더라도 백그라운드에서 계속 실행한다.
- UI가 없다.
Service 종류
- 포그라운드 서비스: 사용자에게 잘 보이는 작업이다. 포그라운드 서비스의 경우 반드시 알림을 표시해야하며, 사용자가 앱과 상호작용하지 않을 때(앱을 사용하지 않을 때)에도 계속 실행된다. 음악 재생과 같은 작업이 대표적인 예이다.
- 백그라운드 서비스: 사용자에게 직접 보이지 않는 작업이다. 예를 들어 저장소를 압축하거나 게임 업데이트, 파일 압축 등이 있다.
- 앱이 API레벨 26 이상을 대상으로 하는 경우 백그라운드 서비스에서 진행해야하는 작업이 즉시 실행해야하는 것은 Work Manager, 지연 작업, 정시에 해야하는 경우에는 Alarm Manager를 사용한다.
- 바인드 서비스: 앱 Component가 bindService를 호출해 서비스를 호출하면 서비스가 바인딩 된다. 바인딩된 서비스는 Client - Server 인터페이스를 제공해 서비스와 상호작용을 한다. 여러개가 한꺼번에 바인딩 될 수 있고, 바인딩 된 Component가 모두 종류되면 서비스도 종료된다.
3. Broadcast Receiver
- 안드로이드 OS에서 발생하는 이벤트와 정보를 앱에서 수신할 수 있도록 하는 UI가 없는 구성요소이다.
- 불특정 다수를 대상으로 발송된 특정 이벤트(배터리 부족 알림, 네트워크 끊김 알림, 문자 수신, 파일 다운로드 완료, 화면 꺼짐, 사진 캡쳐 등)에 대해 응답하고 처리하는 컴포넌트이다.
- 다른 컴포넌트에서 직접적으로 호출이 불가능하다.
- 앱에 필요하다고 생각되는 메시지에 응답할 수 있도록 Broadcast Receiver에 등록할 수 있다.
- Broadcast Receiver 클래스 안에 onReceive() 메소드를 이용하여 Intent 객체로 발송된 특정 Broadcast 메시지를 처리할 수 있다.
- Broadcast 메시지를 담은 Intent 객체를 sendBroadcast() 혹은 sendOrderedBroadcast(), sendStickyBroadcast() 메소드 등을 통해 발송하여 해당 Broadcast Receiver가 응답하게 한다.
4. Content Provider
- 파일 시스템, SQLite DB, 웹 상이나 앱이 엑세스할 수 있는 다른 모든 영구 저장 위치에 저장 가능한 앱 데이터의 공유형 집합을 관리한다.
- 다른 앱은 Content Provider를 통해 해당 데이터를 질의하거나, 수정할 수 있다.
- 연락처 정보나 갤러리 이미지 또는 비디오와 같이 용량이 큰 데이터를 공유하는 데에 적합하다. (용량이 작은 데이터는 Intent로 공유)