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에 위와 같은 내용들이 담겨있다.

 

+ Recent posts