iOS를 사랑하는 AOS 개발자

[Android] 안드로이드 4대 컴포넌트 본문

Android (이론)

[Android] 안드로이드 4대 컴포넌트

아사안개 2021. 12. 17. 13:16
반응형
SMALL

👼🏻 초보 안드로이드 개발자가 매번 구글링하기 싫어서 정리하는 블로그 👼🏻 

 

 

 

 

Android App은 컴포넌트로 구성되어 있다.

  • Activity
  • Service
  • Broadcast Receiver
  • Content Provider

이를 4대 컴포넌트라고 부르며 각 컴포넌트들은 하나의 독립된 형태로 존재하며 정해진 역할을 수행한다.

 


 

Activity
    ✔️ UI 화면을 담당하는  컴포넌트
    ✔️ 실질적으로 화면에 나타나는 UI 및 기능 역할을 수행하는 컴포넌트이다.
Android Studio 의 새로운 패키지를 생성했을시 MainActivity 가 기본적으로 생성되는 것처럼.

 

 Service
    ✔️ 화면에 존재하지 않고 백그라운드에서 실행되는 컴포넌트
    ✔️ 서비스에는 크게 포그라운드, 백그라운드, 바운드 이렇게 3가지로 나뉜다.
☑️ Foreground Services
알림을 표시해 놓고 사용자와 상호 작용하지 않아도 계속 백그라운드에서 실행되는 걸 말함

☑️ Background Services
사용자가 직접 알지 못하는 작업을 수행할 때 사용

☑️ Bound Services
앱 내에서 서비스를 사용하여 간단한 클라이언트(서버 환경을 구성) 특정 컴포넌트와 서비스간 상호작용

 

startService

➡️ 단순 서비스를 시작, 종료하게 하는 서비스이다.

생명주기는 onCreate - onStartCommand - onDestroy

onStartCommand 에 수행할 코드를 작성하면 생명주기대로 흘러가면서 수행을 하게 된다.

onStartCommand 의 return 값 :: 

START_STICKY : 안드로이드가 서비스를 강제 정지한 경우, null intent를 보내서 재시작한다.

START_NOT_STICKY : 안드로이드가 서비스를 강제 정지한 경우, 재시작 하지 않는다.

START_REDELIVER_INTENT : 안드로이드가 서비스를 강제 정지한 경우, 동일한 intent를 보내서 재시작한다.

 

 

bindService

➡️ 특정 컴포넌트와 서비스간 상호작용이 있을 때 사용하는 서비스이다.

생명주기는 onCreate - onBind - onUnbind - onDestroy

 

 

intentService

➡️ 액티비티와 프래그먼트 LifeCycle에 의존하지 않고 백그라운드에서 처리하고 싶은 경우 사용한다.

이 서비스는 핸들스레드루퍼 + 핸들러를 조합해 구현되어 있다.

콜백메소드를 구현할 필요 없고 onHandleIntent()만 구현하면 되고 요청한 작업이 완료되면 자동적으로 서비스를 중단한다.

 

반응형
 Broadcast Receiver
    ✔️ 단말기에서 발생하는 다양한 이벤트, 정보를 받고 응답하는 컴포넌트
    ✔️ Broadcast Receiver에는 정적, 동적 리시버로 나뉜다.
☑️ 정적 리시버
매니페스트에 등록하여 리시버를 구현하는 형태인데 한 번 등록하면 해제할 수 없는 방식이다.

☑️ 동적 리시버
클래스 파일에서 리시버를 등록, 해제할 수 있는 형태이기 때문에 앱에 부하를 줄 일 수 있다.
하지만 해제를 적절히 해주지 않는다면 메모리 릭이 발생할 수 있다.

 

 

 Content Provider
    ✔️ 데이터를 저장하고, 가져오고, 모든 APP에서 접근할 수 있도록 하는 컴포넌트
다른 앱의 데이터를 사용하고자 하는 앱에서는 URI를 이용하여 콘텐츠 리졸버를 통해 다른 앱의 콘텐츠 프로바이더에게 데이터를 요청한다. 요청 받은 컨텐츠 프로바이더는 URI를 확인하고 내부에서 데이터를 꺼내어 컨텐츠 리졸버에게 전달한다.
☑️ 동적 리시버
Content://Authority/path/id
content : 스키마
authority : 콘텐츠 프로아비더의 명칭
path : 정보의 위치(사용자 정의영역)
id : 특정 정보를 지칭(사용자 정의영역))

 

 

 

(❗️ 컴포넌트 : 앱의 구성 단위, 컴포넌트를 조합하여 하나의 앱을 만드는 것을 의미)

(❗️ 리시버에는 너무 많은 작업, 시간이 오래걸리는 작업을 하면 안된다. 처리 지연시간이 길어진 경우 ANR이 발생하기 떄문에 리시버에는 간단한 일을 처리하도록 하고, 스레드를 별도로 생성해서 처리하도록 해야한다)

(❗️ 스키마 : 제약조건에 관해 전반적인 명세를 기술한 것(어떤 구조로 데이터가 저장되는가를 나타내는 구조))

(❗️ URL 과 URI의 차이)

       URL : 웹상에서 서비스를 제공하는 각 서버들에 있는 파일들의 위치를 표시하는것

       URI : 존재하는 자원을 식별하기 위한 것

 

 

 

 

SMALL
🔆 막무가내 기술 블로그 / Android Interview 에서 참고하여 작성했습니다.
원본 : https://www.notion.so/imwj/Android-Interview-3ce7ddf12ddb413a9d2213173654d52c
반응형
LIST
Comments