1) 앱 구성요소 ( 4가지 )
Android 앱의 필수적인 요소로, 각각은 시스템이나 사용자가 앱에 들어올 수 있는 진입점
Activity, Service, BroadcastReceiver, ContentProvider 이렇게 4가지가 있다.
1-1) Activity
- 앱과 사용자가 상호작용을 하기 위한 진입점
- 앱을 실행할 때는 앱을 전체적으로 호출하는 것이 아니라 앱의 액티비티를 호출
- 모든 앱에 반드시 1개 이상 존재
- Activity 는 사용자와 상호작용을 위한 UI 가 있음
- 앱이 실행되면, 화면이 표시됨
- 사용자의 입력값을 받음 ( 화면 클릭, 더블 클릭, 롱클릭, 스와이프, 드래그 앤 드랍 등 )
- 사용자에게 제공하고자 하는 내용을 화면에 표시함
- Lifecycle 이 있음
출처: https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko
활동 수명 주기 | Android Developers
활동은 사용자가 전화 걸기, 사진 찍기, 이메일 보내기 또는 지도 보기와 같은 작업을 하기 위해 상호작용할 수 있는 화면을 제공하는 애플리케이션 구성요소입니다. 각 활동에는 사용자 인터페
developer.android.com
1-2) Service
- 백그라운드에서 오래 실행되는 작업 수행을 위한 컴포넌트
- 사용자가 다른 앱으로 전환하더라도 백그라운드에서 계속 실행
- UI 없음
- 종류: 포그라운드 서비스, 백그라운드 서비스, 바인드 서비스
- 포그라운드 서비스 : 사용자에게 잘 보이는 작업. 포그라운드 서비스의 경우, 반드시 알림을 표시해야하며, 사용자가 앱과 상호작용하지 않을 때도 계속 실행됨
- 백그라운드 서비스: 사용자에게 직접 보이지 않는 작업
- ex) 사용자에게 보이지 않는 작업 ( 저장소 압축, 게임 업데이트, 파일 압축 등 )
- 앱이 API 레벨 26 이상을 대상으로 할 경우
- 즉시 실행해야 하는 작업 : Work Manager
- 지연 작업 : Alarm Manager
- 바인드 서비스 : 앱 컴포넌트가 bindService 를 호출해 서비스를 호출하면, 서비스가 바인딩 된 서비스는 클라이언트-서버 인터페이스를 제공해 서비스와 상호작용 함. 여러 개가 한꺼번에 바인딩 될 수 있고, 바인딩 된 컴포넌트가 모두 종료되면, 서비스도 종료됨.
출처: https://developer.android.com/develop/background-work/services?hl=ko
서비스 개요 | Background work | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 서비스 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Service는 백그라운드에서 장기 실행 작업
developer.android.com
foreground/backgroundService 서비스를 실행할 때,
startService() 로 실행 서비스를 종료할 때,
onDestroy() 를 명시적으로 호출해야 함
bindService 서비스를 실행할 때,
bindService() 로 실행 서비스를 종료할 때,
바인딩을 요청한 클라이언트들이 모두 사라지면
unbinding 이 되는 상태이므로 서비스는 종료됨
예) Activity A 와 Acitivity B 가 서비스 C를 바인드 했을 때
Activity A 와 Activity B 가 종료되면, 더 이상 바인딩할 서비스가 없어진다.
클라이언트 자체가 없어지기 때문.
1-3) BroadcastReceiver
- 안드로이드 OS에서 발생하는 이벤트와 정보를 앱에서 수신할 수 있도록 하는 구성요소
- UI 없음
- 예시
- 화면이 꺼졌거나
- 배터리가 부족하거나
- 사진을 캡처했거나
[부연설명]
Broadcast ( 방송 ) + Receiver ( 수신자 ) 두 개 단어의 합성어 뜻 그대로 가지고 있다.
방송을 듣는 사람.
안드로이드 OS 에서는 다양한 이벤트가 발생하는데, 이때 이 정보를 특정 앱에서 알아야하는 케이스들이 있다.
음악 앱이라면 이어폰이 꽂혔다가 이어폰이 해제가 된 경우, 음악재생이 중지되는 것이 기대됨
이런 이벤트를 캐치해서 처리
1-4) ContentProvider
- 파일 시스템, SQLite 데이터베이스, 웹상이나 앱이 액세스할 수 있는 다른 모든 영구 저장장치에 저장 가능한 앱 데이터의 공유형 집합을 관리
- 다른 앱은 콘텐츠 프로바이더를 통해 해당 데이터를 질의하거나 수정할 수 있음
- 예시
- 연락처 정보
- 갤러리 이미지 / 비디오
[부연설명]
Content ( 내용 ) + Provider ( 제공자 ) 내용을 제공하는 사람
디바이스에 저장되어있는 모든 데이터에 접근할 수 있는 것을 관리한다.
연락처 정보를 가져온다거나,
갤러리에 저장된 이미지를 가져오는 기능은,
앱 내가 아닌 디바이스에 저장된 정보를 가져오는 것
2) Manifest
- 앱의 필수적인 정보를 담고 있는 파일
- 앱의 패키지 이름
- 앱의 구성요소
- 권한
- 필요한 기능
[부연설명]
Manifest 의 사전적 의미는 명사로는 화물 목록, 승객 목록 동사로는 나타내다.
두 가지를 섞어서 생각해보면, Manifest 는 앱의 필수적인 정보를 담고 있다.
정보를 나열한다는 관점에서는 ”화물 목록”으로 볼 수 있고
앱의 성격이나 특징을 나타낸다는 관점에서는 동사 뜻인 “나타내다”를 잘 반영한다.
앱의 패키지명이라고 하면, ID 같은 고유한 값
앱의 구성요소는 4가지 컴포넌트들이다. 반드시 Manifest 파일에 선언이 되어야 사용이 가능하다.
예) Activity 파일을 만들어 놓고, Manifest 파일에 Activity 를 선언하지 않으면, 해당 Activity를 호출할 수 없다.
4대 컴포넌트에 대해서는 Manifest 에 해당 내용이 적혀 있어야 한다.
특정 앱애서는 앱을 사용하기 위해서는 이런 권한이 필요합니다. 알림이 뜨는 것을 볼 수 있다. 지도 앱이면, 위치정보 접근 배달 앱이면, 리뷰 작성 시, 사진 접근 등의 권한이 필요하다.
Manifest 파일만 보고도 대략적으로 이 앱이 어떤 앱인지 알 수 있다.
3) Intent
- 구성요소 간의 통신을 할 수 있게 하는 역할
- 앱에 포함된 구성요소 이외에, 다른 앱의 구성요소와도 통신할 수 있음
- 명시적 인텐트 : 특정 컴포넌트, 액티비티를 명확히 특정해 실행할 경우
- 예시) A_Activity 에서 B_Activity 실행을 호출할 경우
- 암시적 인텐트: 동작을 특정하긴 했지만, 실행될 대상이 달라질 수 있는 경우
- 예시) 특정 URL 을 실행이라는 액션을 요청한 경우, 웹브라우저 기능을 가진 다수의 앱이 호출될 수 있는 경우
- 명시적 인텐트 : 특정 컴포넌트, 액티비티를 명확히 특정해 실행할 경우
[부연설명]
Intent 는 “의도”라는 뜻을 가지고 있다.
’어떤 액션을 취하겠다’는 “액션 정보”를 담고 있기도 하고, ”데이터” 를 담고 있어서
각 구성요소 간에 이런 데이터를 주고 받아야 한다. 특정 액션을 취해야 한다.
Intent에 위와 같은 내용들이 담겨있다.
'안드로이드 앱(Kotlin|Java) > [2025~] 안드로이드 앱' 카테고리의 다른 글
Part0_Ch03_04 Activity 생명주기 (2) (0) | 2025.02.03 |
---|---|
Part0_Ch03_03 Activity 생명주기 (1) (0) | 2025.02.03 |
Part0_Ch03_01 Android OS (1) | 2025.02.03 |
Part0_Ch02_05 data, sealed class (1) | 2025.01.25 |
Part0_Ch03_02 Android 기본 요소 (0) | 2025.01.24 |