안드로이드

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

최효식 2022. 4. 14. 00:36

Android 앱에는 앱을 구성하는 크게 4가지 종류의 컴포넌트가 있습니다.

 

각각의 컴포넌트는 하나의 독립된 형태로 정해진 역할을 수행합니다.

 

4대 컴포넌트에는 Activity , Service , Broadcast Receiver , Content Provider 이렇게 있습니다.

 

 

1. Activity

 

UI를 담당하는 대표적인 컴포넌트입니다.

 

 

2. Service

 

화면에는 존재하지 않지만 백그라운드에서 실행이 되는 컴포넌트입니다.

 

예를들어 음악을 재생하거나 , 파일 입출력을 수행하거나 , 네트워크 트랜잭션등을 처리할 수 있습니다.

 

서비스의 종류로는 백그라운드 , 바인더 , 포그라운드 이렇게 3종류가 있습니다.

 

백그라운드 : 사용자에게 직접 보이지 않는 작업을 수행합니다. 어플리케이션을 꺼도 백그라운드 서비스는 계속 수행할 수 있습니다.

 

바인더 : 바인딩을 위한 서비스입니다. Activity와 서비스는 따로 운영될 수 있지만  Activity 를 서비스에 바인딩하여 서로 상호작용할 수 있습니다. bindService()를 호출해서 사용합니다. 바인딩이 해제되면 해당 서비스는 사라집니다.

 

포그라운드 : 사용자에게 직접 보이는 작업을 수행합니다. 음악플레이어 앱 같은 경우 재생을 할 때 포그라운드 서비스를 사용하게됩니다. 그래서 사용자가 다른 앱을 사용중이어도 계속해서 실행이 됩니다.

 

 

3. Broadcast Receiver

 

단말기에서 발생하는 다양한 이벤트,정보등을 받고 반응하는 컴포넌트입니다.

 

우리가 알람을 등록해놓고 알람이 울릴 때, 화면이 on,off 되었거나 재부팅 할 때등 있습니다.

 

정적 리시버동적 리시버로 나뉩니다.

 

정적 리시버

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

동적 리시버

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

리시버에는 너무 많은 작업, 시간이 오래걸리는 작업을 하면 안됩니다. 처리 지연시간이 길어진 경우 ANR(애플리케이션 응답 없음)이 발생하기 떄문에 리시버에는 간단한 일을 처리하도록 하고, 작업스레드를 별도 생성해서 처리하도록 해야합니다.

 

4. Content Provider

 

데이터를 저장하고 , 가져오고 , 모든 App에서 접근할 수 있도록 하는 컴포넌트 입니다.

 

ContentProvider는 앱이 데이터를 다른 앱과 공유하는 것을 도와줍니다. 만약 내 앱에서 ContentProvider를 구현하여 제공한다면, 다른 앱들은 ContentResolver를 통해서 내 앱에 구현된 ContentProvider에 접근할 수 있습니다.

 

★ 안드로이드 권장 URI 형식

Content://Authority/path/id

content : 스키마

authority : ContentProvider의 명칭

path : 정보의 위치(사용자 정의영역)

id : 특정 아이템을 지칭(사용자 정의영역)

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

★ URL과 URI 의 차이는 URL은 웹상에서 서비스를 제공하는 각 서버들에 있는 파일들의 위치를 표시하는 것, URI는 존재하는 자원을 식별하기 위한 것입니다.

 

사용 예제 참조 사이트 : https://codechacha.com/ko/android-contentprovider/