안드로이드 전체

1.안드로이드 컴포넌트 4가지

강용민 2021. 8. 4. 20:09

1. Activity

안드로이드 프로그래밍을 하면 만나는 가장 기초적인 컴포넌트로서, 사용자 인터페이스의 기본 단위.

앱의 한 화면을 자체를 Activity 라 하고, 일반적으로 앱은 여러개의 Activity로 이뤄지며, 

또 하나의 Activity는 여러개의 Activity 또는 View(ex: textview, imageview ...) 로 이뤄져 있다.

 

2. Service

Activity가 화면에 보이고 사용자에게 입출력을 제공한다면, Service의 경우 그와 반대로 화면에 출력되는 UI가 없으며, 백그라운드에서 길고 반복적인 작업을 하는데 사용된다. 예를 들자면, 일반적인 음악재생 앱의 경우, 노래 재생은 계속하되 다른 앱을 실행한다던가 다른 작업을 할수 있다. 즉, 여기서는 노래가 Service로 실행 중인것이다. 앞서 말했듯 Service는 UI 가 없기 때문에, 사용자와 통신하고자 한다면, 중간에 Activity를 삽입하고 이를 통해 중간 매개체 삼아 통신한다.  

[ Service <-> Activity <-> 사용자 ]

재미있는 특징으로는 Service는 하나의 앱에 종속적이지 않기 때문에 하나의 Service로 다양한 앱들과 통신이 가능하다는 점이다.

A 앱에서 서비스를 실행해서, B 앱에서 해당 서비스에 접근해서 데이터/상태를 가져오고 수정이 가능하다는 점에서 앱과 앱의 통신에서 중요한 역할을 수행할수 있다.

 

3. Broadcast Receiver

안드로이드는 시스템의 기능/이벤트들이 발생하면, 이를 방송(Broadcast) 한다. 

네트워크에서의 Broadcast 개념과 비슷한 것으로, 여기서 방송한다는 것은, 어떠한 메세지(신호)를 안드로이드에 설치된 "모든" 앱들에게 전송한다는 것이다.

물론 각 앱에서 해당 신호를 받을건지 말건지 결정할 수 있으며, 그러한 역할을 수행하는 것이 바로 Broadcast Receiver 이다. 

Broadcast Receiver 만 구현해두었으면 언제든지 각종 시스템 이벤트에 대비하고 이를 활용할수 있다. (여기서 시스템 이벤트들이란, 전화가 왔다!, 사진을 찍었다!, 배터리가 없다!, 문자가 왔다!, 기타 다양한 것이 있다. 안드로이드 API 를 참고하자.)

시스템 이벤트만 언급 했지만 사실 일반 앱에서도 시스템에 정의된 신호가 아닌 임의 Broadcast 를 날릴수 있고, 이를 활용 가능하다.

 

4. Content Provider

앱 간에 데이터를 송수신하는데 사용된다. 일반적으로 SD카드나 외장메모리는 아무 앱이나 접근 가능하지만, 앱 패키지 내의 폴더는 다른 앱들이 접근 불가능하다. 이때, 해당 폴더의 데이터에 접근하고 이를 사용하고자 할때 사용하는 것이 Content Provider 이다. 대표적으로 카톡이 있겠다. 이놈은 설치만 하면 자동으로 주소록과 동기화하여 친구들을 마구 등록해 놓는다. 좋은 기능이기도 하지만 어찌보면 짜증나기도 한다. 여하튼! 주소록 앱에서 Content Provider 를 제공하고, 이를 활용하여 카톡은 Content Resolver 라는 클래스를 통해 주소록 DB 에서 접근하여 정보를 가져오는 것이다.

 

앱의 용도에 따라 상기 컴포넌트들이 다양한 조합을 통해 사용될수 있다.

다시 말해, 컴포넌트들을 조합해서 사용한다는것은 컴포넌트들간 통신이 필요하다는 것이다.

그럼 어떻게 통신하는가는 바로 "Intent" 를 활용한다.

 

보편적인 사용으로는 Activity의 전환에 많이 활용되는 것을 흔히 볼수 있으며, 

어떤 엑티비티를 불러라~ 서비스를 불러라~ 데이터 이거를 줘라~ 와 같은 메세지들은

왕창 모조리 싸그리 "intent" 에 담겨 전달 된다는 점 알아두자!

[출처] [이론] 안드로이드 컴포넌트 4가지|작성자 개구리

'안드로이드 전체' 카테고리의 다른 글

안드로이드 컴포넌트  (0) 2021.08.06
안드로이드 컴포넌트-Activity  (0) 2021.08.06
코루틴 개념  (0) 2021.08.04
.2 레이아웃  (0) 2021.08.04
안드로이드 컴포넌트 - Service  (0) 2021.08.04