Cute Apple
본문 바로가기
개발/Android

[Android] 4대 Component

by 미댕댕 2022. 7. 29.

각각의 컴포넌트는 독립적인 형태로 존재하며, 고유한 기능을 수행하고 Intent 를 통해서 상호작용한다.

 

Intent란❓

  • 컴포넌트 A가 컴포넌트 B를 호출할 때 필요한 정보들을 담고 메세지 객체
  • 전달하는 수단으로서의 객체 (상태/값 등을 저장하기 위한 객체는 Bundle)

 

명시적 인텐트

  • 호출할 대상을 지정하여 사용
val myIntent = Intent(mContext, MainActivity::class.java)

val myIntent = Intent(mContext, MyService::class.java)

 

암시적 인텐트

  • 컴포넌트외의 속성들로 구성하여 속성에 부합하는 컴포넌트 실행
//전화걸기를 요청하는 소스

val intent = Intetn("android.intent.action.CALL", Uri.parse(tel))

 


Activity 

  • 앱의 UI 화면을 담당하는 컴포넌트
  • 하나 이상의 View 또는 ViewGroup 이 있어야함(예를들어 버튼, 이미지 등등)

 

Service

  • 화면에 존재하지 않고 백그라운드에서 실행되는 컴포넌트
  • Application이 종료되어도 동작

 

포그라운드(Foreground) 서비스

사용자가 눈에띄는 작업을 수행해야하는 경우에 사용

예를들어 피트니스앱(permission 필요), 파일다운로드, 오디오 플레이어 앱

앱과 상호작용 하지 않는 경우에도 계속 실행

Notification 을 통해 status 표시 가능

 

백그라운드(Background) 서비스

사용자가 직접 보이지 않는 작업을 수행

예를들어 게임 업데이트 중에 해당앱에서 나가도 업데이트는 계속 진행되는것

 

=> 현재 백그라운드에대한 많은 제한들이 있다

참고 : https://developer.android.com/about/versions/oreo/background

 

 

바운드(Bound) 서비스

클라이언트-서버 인터페이스를 제공하여 구성 요소가 서비스와 상호작용

여러 프로세스에 걸쳐 프로세스 간 통신(IPC)으로 수행

바인딩이 해제되면 해당 서비스는 소멸

 

 

Servie 생명주기

여기서 startService() 는 Foreground 와 Backgound 이고 bindService() 는 Bound 이다

 

BroadcastReceiver

  • 단말기에서 발생하는 다양한 이벤트, 정보를 받고 반응하는 컴포넌트
  • 예를 들어 배터리부족, 충전, 문자 수신, 전화수신

 

정적 리시버

  • 매니페스트에 등록하여 리시버를 구현하는 형태인데 한 번 등록하면 해제할 수 없는 방식

 

🛑 단, API 레벨이 26 이상이면 제한이 면제되는 몇가지 빼고는 사용할수 없다..⁉ (홀리..)

대신에 scheduled jobs 를 사용해야한다고 한다!! (리얼리..?!)

참고 : 

 

동적 리시버

  • 클래스 파일에서 리시버를 등록, 해제할 수 있는 형태이기 때문에 앱에 부하가 적음
  • 다른 컴포넌트에 귀속되기 때문에 다른 컴포넌트의 생명주기가 끝나면 동작하지 않음
  • 해제를 적절히 해주지 않는다면 메모리 릭이 발생

 

 

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

Content Provider

  • 데이터를 저장하고, 가져오고, 모든 App에서 접근할 수 있도록 하는 컴포넌트
  • 앱에서 갤러리에 접근하거나 사진파일을 가저오거나 할때 이용함
  • 권한이 필요함

 

반응형

'개발 > Android' 카테고리의 다른 글

[Android] Layout 종류  (0) 2022.07.31
[Android] Retrofit2 와 OkHttp  (0) 2022.07.30
[Android] Handler? Looper? Runnable?  (0) 2022.07.28
[Android] Room 사용기  (0) 2022.07.28
[Android] Context란?  (0) 2022.07.27

댓글