MyCloud
[안드로이드] 4대 컴포넌트 본문
안드로이드 어플리케이션은 4대 컴포넌트(component)로 구성되어 있습니다.
안드로이드 4대 컴포넌트는 액티비티(Activity), 서비스(Services),
방송 수신자(Broadcast receiver), 콘텐츠 제공자(Content provider) 입니다.
안드로이드 개발은 4대 컴포넌트를 상속받아 정의된 함수들을 override해서 구현하는 경우가 대부분입니다.
액티비티 (Activity)
액티비티는 사용자 인터페이스 화면을 말하며 특정 작업을 담당하는 컴포넌트입니다.
여기서 특정 작업이라는 말은 UI를 화면에 나타내고 사용자 터치 등의 event를 입력받는 작업을 말합니다.
액티비티마다 화면을 가득 채우는 창이 하나씩 주어지며 작은 창으로 만들어 다른 창 위에 띄울 수도 있습니다.
액티비티를 사용하기 위해서는 manifest.xml 파일에 등록해야 하며 수명주기를 이해하고 있어야 합니다.
서비스 (Service)
서비스는 백그라운드에서 실행되는 컴포넌트로 오랫동안 실행되는 작업이나 원격 프로세스를 위한 작업을 할 때 사용됩니다.
사용자 인터페이스를 제공하지 않으며 사용자가 또 다른 어플리케이션으로 전환하더라도 배경에서 계속해서 실행됩니다.
이외에도, 구성 요소를 서비스에 바인딩하여 서비스와 상호 작용할 수 있으며,
심지어는 프로세스 간 통신(IPC)도 수행할 수 있습니다.
예를 들어 한 서비스는 네트워크 트랜잭션을 처리하고, 음악을 재생하고 파일 I/O를 수행하거나
콘텐츠 제공자와 상호 작용할 수 있으며 이 모든 것을 배경에서 수행할 수 있습니다.
핸드폰 화면이 꺼져도 음악이 계속 나와야 하는 음악서비스 어플을 예로 들 수 있습니다.
서비스 또한 manifest.xml 파일에 선언해야 하며 Activity와 연동된 수명주기를 이해하고 있어야 합니다.
서비스를 생성하는 방법은 startService()를 호출하여 시작하는 방법과 bindService()를 사용하는 방법이 있습니다.
어떤 서비스인지에 따라 다르기 때문에 이후에 자세히 알아보도록 하겠습니다.
방송 수신자 (Broadcast receiver)
방송 수신자는 안드로이드 단말기에서 발생하는 다양한 이벤트/정보를 받고 반응하는 컴포넌트입니다.
예를 들면 시스템부팅, 배터리부족, 전화/문자 수신, 네트워크 끊김을 알려주는 것이 방송입니다.
콘텐츠 제공자 (Content provider)
콘텐츠 제공자는 구조화된 데이터 세트로의 액세스를 관리합니다.
데이터를 캡슐화하여 데이터 보안을 정의하는 데 필요한 메커니즘을 제공하기도 합니다.
콘텐츠 제공자는 한 프로세스의 데이터에 다른 프로세스에서 실행 중인 코드를 연결하는 표준 인터페이스입니다.
즉, 콘텐츠 제공자는 데이터를 관리하고 다른 어플리케이션 데이터를 제공하는 컴포넌트입니다.
데이터를 다른 애플리케이션과 공유할 생각이 없으면 나름의 제공자를 개발하지 않아도 됩니다.
그러나, 자체 애플리케이션에서 사용자 지정 검색 제안을 제공하려면 나름의 제공자가 꼭 필요합니다.
또한, 복잡한 데이터나 파일을 자신의 애플리케이션에서 다른 애플리케이션으로
복사하여 붙여넣고자 하는 경우에도 나름의 제공자가 필요합니다.
안드로이드 자체에 내장되어 있는 오디오파일, 동영상, 이미지, 개인 연락처 정보 등을 관리하는 것이
콘텐츠 제공자에 해당합니다.
인텐트와 인텐트 필터 (Intent, Intent Filters)
인텐트는 서로 독립적으로 동작하는 4가지 컴포넌트들 간의 상호 통신을 위한 장치입니다.
간단하게 말하면, 컴포넌트 간의 통신수단, 메세지 객체입니다.
인텐트를 통하여 다른 애플리케이션의 구성요소로부터 작업을 요청할 수 있습니다.
예를 들면, 액티비티를 생성하려면 Intent를 startActivity()로 전달하면 됩니다.
서비스도 마찬가지로 Intent를 startService()로 전달하면 됩니다.
인텐트에는 명시적 인텐트와 암시적 인텐트라는 두가지 유형이 있습니다.
'Programming > Android' 카테고리의 다른 글
[안드로이드] 버튼만드는 2가지 방법 비교 (0) | 2016.04.03 |
---|---|
[안드로이드] UI 구성요소 (0) | 2016.02.01 |
[안드로이드] 공부를 위한 사이트 소개 (1) | 2016.01.31 |
[안드로이드 스튜디오] 2.0 프리뷰 (0) | 2016.01.30 |
[안드로이드 스튜디오] 프로젝트 이름변경 (2) | 2016.01.30 |