앱 구성 요소(Component)는 Android 앱의 필수적인 기본 구성 요소이다. 각 Component는 시스템이나 사용자가 앱에 들어올 수 있는 진입점이며, 다른 Component에 종속되는 Component도 있다.
Component는 Activity, Service, Broadcast Receiver, Content Provider 이렇게 4가지 유형이 있다. 각 유형은 뚜렷한 목적을 수행하고, 각자의 수명 주기가 있어 Component의 생성 및 소멸 방식을 정의한다. 각 Component는 독립적인 형태로 존재하고, 고유한 기능을 수행하며 Intent를 통해 상호작용한다.
✅ Activity
- 사용자와 상호작용하기 위한 진입점
- 사용자 인터페이스를 포함한 화면 하나를 나타냄
- 예를 들어, 이메일 앱이라면 새 이메일 목록을 표시하는 Activity, 이메일을 작성하는 Activity, 이메일을 읽는 데 사용하는 Activity가 있을 수 있음. 여러 Activity 함께 작동하여 이메일 앱에서 사용자 환경을 구성하지만, 각자 독립되어 있음.
- 따라서, 이메일 앱에서 허용할 경우 다른 앱이 이런 Activity 중 하나를 시작할 수 있음. 예를 들어, 카메라 앱이면 이메일 앱 안의 Activity를 시작하여 사용자가 새 이메일을 작성하고 사진을 공유하게 할 수 있음.
[ 시스템과 앱의 상호작용을 돕는 Activity ]
- 사용자가 현재 관심을 가지고 있는 사항을 추적하여, Activity를 hosting하는 프로세스를 시스템에서 계속 실행하도록 함.
- 이전에 사용한 프로세스에 사용자가 다시 찾을 만한 Activity(중단된 Activity)가 있다는 것을 알고, 해당 프로세스를 유지하는 데 더 높은 우선순위를 부여함.
- 앱이 프로세스를 종료하도록 도와서 이전 상태가 복원되는 동시에 사용자가 Activity로 돌아갈 수 있게 함.
- 앱이 서로 사용자 플로우를 구현하고, 시스템이 이러한 플로우를 조정하기 위한 수단을 제공함.
=> 사용자가 Application과 상호작용하며 실제로 사용자에게 보이는 화면
✅ Sevice
- 백그라운드에서 앱을 계속 실행하기 위한 다목적 진입점
- 백그라운드에서 실행되는 구성요소로, 오랫동안 실행되는 작업을 수행하거나 원격 프로세스를 위한 작업을 수행함.
- 사용자 인터페이스를 제공하지 않음. 예를 들어, 사용자가 다른 앱에 있는 동안 백그라운드에서 음악을 재생하거나, 사용자와 Activity 간의 상호작용을 차단하지 않고 네트워크를 통해 데이터를 가져올 수도 있음.
- 다른 구성요소(예: Activity)가 서비스를 시작한 다음, 실행되도록 두거나 자신에게 Binding하여 상호작용하게 할 수도 있음.
- Binding된 서비스는 다른 앱(또는 서비스)에서 서비스를 사용하고 싶다는 의향을 표현하면 실행됨. 이는 서비스가 다른 프로세스에 API를 제공하는 것임. 따라서 시스템은 프로세스 사이에 종속성이 있는지 알게 됨.
=> 직접적으로 상호작용하지는 않고, 백그라운드에서 작업을 처리하기 위해 사용
✅ Broadcast Receiver
- 시스템이 정기적인 사용자 플로우 밖에서 이벤트를 앱에 전달하도록 지원하는 구성 요소
- 앱이 시스템 전체의 Broadcast 알림에 응답할 수 있게 함.
- 앱으로 들어갈 수 있는 또 다른 명확한 진입점이기 때문에, 현재 실행되지 않은 앱에도 시스템이 Broadcast를 전달할 수 있음.
- 예를 들어, 앱이 사용자에게 예정된 이벤트에 대해 알리는 알림을 게시하기 위한 알람을 예약할 경우 그 알람을 앱의 Broadcast Receiver에 전달하면 알람이 울릴 때까지 앱을 실행하고 있을 필요가 없음.
- 대다수의 Broadcast는 시스템에서 발생함. 화면이 꺼지거나, 배터리가 부족하거나, 사진을 캡처했다고 알리는 Broadcast가 대표적임.
- 앱도 Broadcast를 시작할 수 있음. 예를 들어, 다른 앱에 일부 데이터가 기기에 다운로드되었고 이를 사용할 수 있다는 것을 알리는 데 사용함.
- Broadcast Receiver는 사용자 인터페이스를 표시하지 않지만, 상태 표시줄 알림을 생성하여 사용자에게 브로드캐스트 이벤트가 발생했다고 알릴 수 있음.
=> OS에서 발생하는 이벤트 정보를 받고 대응하는 컴포넌트
✅ Content Provider
- 파일 시스템, SQLite 데이터베이스, 웹상이나 앱이 액세스할 수 있는 다른 모든 영구 저장 위치에 저장 가능한 앱 데이터의 공유형 집합을 관리
- 다른 앱은 Content Provider를 통해 해당 데이터를 쿼리하거나, Content Provider가 허용할 경우에는 수정도 가능함.
- 예를 들어, Android 시스템은 사용자의 연락처 정보를 관리하는 Content Provider를 제공함. 적절한 권한을 가진 앱이라면 Content Provider를 쿼리하여 특정한 인물에 대한 정보를 읽고 쓸 수 있음.
- Content Provider를 데이터베이스에 대한 추상화로 생각하기 쉽지만, 시스템 설계 관점에서 볼 때 핵심 목적이 다름. 시스템의 경우 Content Provider는 URI 구성표로 식별되고, 이름이 지정된 데이터 항목을 게시할 목적으로 앱에 진입하기 위한 입구임.
- 따라서, 앱에서 URI 네임스페이스에 넣을 데이터를 매핑할 방식을 결정하고, 해당 URI를 다른 엔터티에 전달할 수 있음. 이를 전달 받은 엔터티는 URI를 사용하여 데이터에 액세스함.
- Content Provider는 앱 전용이기 때문에, 공유되지 않는 데이터를 읽고 쓰는 데에도 유용함.
[ 앱 관리에 대한 특별한 점 ]
- URI를 할당하더라도 앱을 계속 실행할 필요가 없으므로 URI를 소유한 앱이 종료된 후에도 URI를 유지할 수 있음. 시스템은 URI를 소유한 앱이 해당 URI에서 앱의 데이터를 검색할 때만 실행되도록 하면 됨.
- 이 URI는 중요하고 조밀한 보안 모델을 제공함. 예를 들어, 앱은 클립보드에 있는 이미지에 URI를 할당하고 Content Provider가 검색하도록 하여, 다른 앱이 자유롭게 이미지에 액세스하지 못하게 막을 수 있음. 두 번째 앱이 클립보드에서 해당 URI에 액세스하려고 시도하면 시스템에서는 임시 URI 권한을 부여하여 그 앱이 데이터에 액세스하도록 허용할 수 있음. 따라서 두 번째 앱에서는 URI 뒤에 있는 데이터 외에 다른 것에는 액세스할 수 없음.
=> 데이터를 관리하고 다른 애플리케이션의 데이터를 제공하는 데에 사용되는 컴포넌트
'Programming > Android' 카테고리의 다른 글
[UMC 3rd/Android] 주요 Layout (0) | 2022.09.28 |
---|---|
[UMC 3rd/Android] 대표적인 View들의 역할 및 속성 (1) | 2022.09.28 |
[UMC 3rd/Android] Intent : Component 사이의 통신 (0) | 2022.09.27 |
[UMC 3rd/Android] Manifest 주요 속성 (0) | 2022.09.27 |
[안드로이드 스튜디오 - Java] View Group (0) | 2022.01.13 |