프로그래밍/Android2011. 8. 18. 00:21


애플리케이션 구성 요소

● 액티비티(Activity)
● 서비스(Service)
● 브로드캐스트 리시버(Broadacast Receiver)
● 콘텐트 프로바이더(Content Provider)

 액티비티를 제외한 다른 애플리케이션 구성 요소(이하 컴포넌트)들은 별도의 UI(User Interface)를 갖고 있지 않기에 사용자가 눈으로 확인하기가 어렵습니다. 따라서 서비스와 브로드캐스트 리시버는 알림 메시지(Notification)나 토스트(Toast)의 도움을 받아 동작 여부를 사용자에게 알려줍니다. 콘텐트 프로바이더는 애플리케이션 간 데이터 공유를 위한 것으로, 따로 사용자에게 동작 여부를 알려줄 필요가 없습니다.
 각 컴포넌트는 애플리케이션 내에 독립적으로 존재하며, 컴포넌트를 사용하려면 컴포넌트를 호출하거나 컴포넌트에 메시지를 전달해야 합니다. 이러한 컴포넌트 간 통신을 위해서는 인텐트(Intent)를 사용합니다.


액티비티(Activity)

 
 액티비티는 애플리케이션의 한 '화면'을 의미합니다.
 애플리케이션 구성 요소 중 가장 중요한 역활인, 사용자와의 상호작용 즉 사용자의 입력을 받고 결과를 보옂주는 역활을 맡고 있습니다. 때문에 액티비티 구성과 설계는 애플리케이션 개발에서 가장 신경을 써야 할 부분이기도 합니다.
 안드로이드는 휴대용 장치에서 구동될 것을 목적으로 설계되었기에 제한된 자원(메모리, 전원 등) 한경에서 동작하는 것을 전제로 합니다. 이 중에서 가장 중요한 것은 메모리 관리라 할 수 있습니다. 휴대용 단말기의 성능이 많이 좋아졌다고는 하지만, pc에 비하면 메모리가 턱없이 부족합니다.
 때문에 액티비티는 액티비티의 상태(활성/비활성)와 액티비티 생애주기(Activity Lifecycle)에 따라 생성되거나 소멸됩니다. 이러한 특성 때문에, 액티비티의 상태와 생애주기에 대해 잘 알고 있어야만 빠르고 효율적인 애플리케이션을 작성할 수 있습니다.


서비스(Service)

 화면에 표시되어 사용자와 직접 상호작용을 하는 액티비티와 달리 서비스만 백그라운드에서 실행되는 컴포넌트입니다.
 액태비티는 화면에 표시되어 있는 상태가 아니라면 비활성 상태(Inactive)가 되어 액티비티 내에서 처리되는 작업 또한 중단됩니다. 즉, 화면에 액티비티가 표시되어 있는 상태에서만 작업을 처리할 수 있는 것입니다. 얼핏 보기엔 문제가 없지만, 비활성 상태에서도 계속 작업이 실행되어야 하는 경우가 있습니다.
 서비스는 사용자 인터페이스가 없기 때문에 사용자가 동작 여부를 알기가 어렵습니다. 때문에 서비스는 자신의 동작 여부를 알림 메시지 혹은 토스트를 통해 사용자에게 알립니다.


브로드캐스트 리시버(Broadcast Receiver)

 브로드캐스트 리시버는 인텐트(Intent) 형태의 방송 메시지(Braodcast Message)를수신하는 역활을 합니다. 브로드캐스트 메시지는 주로 시스템의 상태(배터리 상태, 통신 상태, SD카드 삽입 등)를 알리기 위해 사용하지만, 애플리케이션에서 특정 작업이 완료되었을 때 처리할 동작을 구현할 대도 사용합니다.
 브로드캐스트 리시버 또한 서비스와 마찬가지로 사용자 인터페이스를 가지고 있지 않기 때문에 사용자에게 작업의 진행 정도나 상태 등을 알리기 위해 알림 메시지나 토스트를 사용합니다.


콘텐트 프로바이더(Content Provider)

 콘텐트 프로바이더는 한 애플리케이션 내의 데이터를 다른 애플리케이션에서도 사용할 수 있게 해줍니다. SD카드와 같은 외장 메모리가 아닌 애플리케이션 디렉터리 내에 저장되는 데이터는 해당 애플리케이션 아닌 다른 애플리케이션에서는 접근할 수 없습니다.
 하지만, 아주 방법이 없는 것은 아닙니다. 공유하려는 데이터가 있는 애플리케이션에 데이터를 공유할 수 있는 '통로'를 만들어주면 됩니다. 콘텐트 프로바이더가 바로 이 통로 역활을 하게 되며, 콘텐트 프로바이더를 통해 외부에서 접근할 수 있는 데이터의 범위, 방법 등을 지정하여 애플리케이션 내의 데이터를 안전하게 공유할 수 있습니다. 콘텐트 프로바이더에 접근하려면 콘텐트 리졸버(Content Resolver)가 필요합니다.


인텐트(Intent)

 인텐트는 액티비티, ㅓ비스 호출 및 브로드캐스트 리시버에 메시지를 전달할 때 사용하며, 내부에 어떤 형식의 정보가 담겨 있느냐에 따라 명시적 인텐트(Explicit Intent)와 암시적 인텐트(Implicit Intent)로 나뉩니다.
 명시적 인텐트는 호출하거나 메시지를 보낼 컴포넌트가 명확하게 지정되어 있습니다. 사람을 부를 때 누군가의 '이름'을 부르듯이 명시적 인텐트의 대상은 오직 하나뿐입니다.
 암시적 인텐트는 명시적 인텐트와 달리 호출하거나 메시지를 보낼 컴포넌트가 명확하게 지정되어 있지 않고, 대상의 속성만 지정되어 있습니다. 마치, '학생~'이라고 부르는 것과 동일하다 볼 수 있습니다. 때문에, 인턴트를 수신하는 대상이 여러 개가 될 수 있습니다.


알림 메시지(Notification)

  알림 메시지(Notification)는 알림 바(Notification Bar)나 알림 패널(Notification Panel), 소리, 진동, LED 점멸 등을 통해 사용자에게 특정 이벤트를 알릴 때 사용합니다. 사용자 인터페이스가 없는 서비스, 브로드캐스트 리시버가 사용자에게 작업완료 등을 알리기 위해 주로 사용합니다.


토스트(Toast)

  토스트 또한 알림 메시지처럼 특정 이벤트를 사용자에게 알릴 때 사용하며, 주로 간단한 메시지를 표시합니다. 토스트는 잠시 화면에 나타났다 사라지기 때문에 토스트를 통해 표시되는 내용은 포커스(표시되는 요소를 선택하는 동작)를 받을 수 없습니다.





출처 - 기초부터 다지는 커니의 안드로이드





Posted by 건깡