안드로이드 애플리케이션의 종류

포그라운드 액티비티(foreground activity)
포그라운드에 있을 때만 쓸모 있는 APP, 화면에 보이지 않을 때는 일시 중단. 게임, map mashups이 이 부류에 속함

백그라운드 서비스(background service)
구성이 변경되고 있는 경우를 제외한 대부분의 사간을 화면에 보이지 않은 채로 실행되는 상호작용이 제한된 애플리케이션. 전화 차단 APP이나 SMS 자동응답기가 이 부류에 속함

인터미턴트 액티비티(intermittent activity)
대부분의 작업을 백그라운드에서 수행, 적절한 때에 사용자에게 통지. 미디어 플레이어가 대표적인 예

안드로이드 애플리케이션의 구성요소

액티비티(Activities)
APP의 프레젠테이션 계층이다. APP에 있는 모든 화면은 Activity 클래스의 확장이 될 것이다. 액티비티는 뷰를 사용해 정보를 보여주고 사용자 액션에 반응하는 그래픽 사용자 인터페이스를 형성한다. 데스크톱 개발의 입장에서 볼 때 액티비티는 폼과 같다.

서비스(Services)
APP의 보이지 않는 일꾼이다. 서비스 컴포넌트는 화면에 보이지 않은 채 실행되어, 여러분의 데이터 소스와 화면에 보이는 액티비티들을 업데이트하고 알림을 생성한다. 서비스는 APP이 가진 액티비티가 활성상태가 아니거나 화면에 보이지 않을 경우에도 계속 돼야 할 필요가 있는 정규적인 처리를 수행하는 데 사용된다.

콘텐츠 공급자(Content Providers)
공유할 수 있는 데이터 저장소. 콘텐츠 공급자는 APP 데이터베이스를 관리하고 공유하는 데 사용된다. 콘텐츠 공급자는 APP 경계를 가로지르는 데이터 공유에 선호되는 방법이다. 이는 다른 APP의 접근을 허용하는 여러분만의 콘텐츠 공급자를 구성할 수 있으며, 또한 다른 APP이 노출한 콘텐츠 공급자를 사용해 그들의 젖장된 데이터에 접근할 수 있음을 뜻한다. 안드로이드 장치는 연락처 정보 같은 유용한 데이터베이스를 노출하는 여러 네이티브 콘텐츠 공급자를 가지고 있다.

인텐트(Intents)
간단한 메시지 전달 프레임워크다. 여러분은 인텐트를 사용해 메시지를 시스템 전역이나 원하는 대상 액티비티 또는 서비스에 방송하고, 어떠한 동작을 수행시키고자 하는 여러분의 의도를 전달할 수 있다. 그러면 시스템은 해당 동작을 수행할 대상(들)을 적절히 결정할 것이다.

브로드캐스트 수신자(Broadcast Receivers)
인텐트 브로드캐스트의 소비자이다. APP은 브로드캐스트 수신자를 생성해 등록함으로써, 특정 필터 조건과 일치하는 브로드캐스트 인텐트에 귀 기울일 수 있다. 브로드캐스트 수신자는 수신되는 인텐트에 반응해 자동으로 여러분의 APP을 시작시킬 것이며, 이들을 이벤트 중심 APP에 적합하도록 만들 것이다.

알림(Notifications)
사용자 알림 프레임워크이다. 알림은 사용자의 현재 액티비티가 가진 포커스를 빼앗거나 방해함 없이 사용자에게 신호할 수 있다록 해준다. 이는 서비스나 브로드캐스트 수신자에게 사용자의 주의를 끌기 위해 선호되는 기법이다. 예컨대, 장치는 텍스트 메시지를 수신하거나 전화가 걸려올 때 불빛을 깜박이거나, 소리를 내거나, 아이콘을 표시하거나, 다이얼로그 메시지를 보여줌으로써 여러분에게 알린다. 알림을 사용하면 여러분의 APP에서도 이와 똑같은 이벤트를 발생시킬 수 있다.

애플리케이션 매니페스트 소개

+ 추가보기 Developer Android

manifest 태그는 여러분의 APP을 구성하는 APP 컴포넌트, 보안 설정, 테스트 클래스를 정의하는 노드를 가진다.

application
매니페스트는 오직 하나의 application 노드만을 가질 수 있다. APP 노드는 속성을 사용해 여러분의 APP을 위한 메타데이터(타이틀, 아이콘, 테마 등)를 지정한다. 또한 APP 노드는 APP 컴포넌트를 지정하는 데 사용되는 액티비티, 서비스, 콘텐츠 공급자, 브로드캐스트 수신자 태그를 담는 컨테이너 역할을 한다.

<application android:icon=@drawable/icon"
  android:theme="@style/my_theme">
  [ ... 애클리케이션 노드 ... ]
</application>

activity
activity 태그는 APP에 의해 보여지는 모든 액티비티에 필요하며, android:name 송성으로 클래스 이름을 지정한다. 이는 메인 실행 액티비티를 비롯해 표시될 수 있는 기타 다른 화면이나 다이얼로그를 반드시 포함해야한다. 매니페스트에 정의되지 않은 액티비티를 시작하려 하면 런타임 예외가 던져질 것이다. 각 액티비티 노드는 그 액티비티를 띄울 인텐트를 지정하는 intent-filter 자식 태그를 지원한다.

<activity android:name=".MyActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

service
activity와 마찬가지로, APP에서 사용되는 각 서비스 클래스에 대한 새로운 service 태그를 하나씩 생성한다.. 서비스 태그 역시 늦은 런타임 바인딩(late runtime binding)을 지원하기 위한 iuntent-filter 자식 태그를 지원한다.

<service android:enabled="true" android:name=".MyService"></service>

provider
공급자 태그는 APP이 가진 각각의 콘텐츠 공급자에 대해 사용된다. 콘텐츠 공급자는 APP 간의 데이터베이스 접근과 공유를 관리하기 위해 사용된다.

<provider   android:permission="com.paad.MY_PERMISSION"
android:name=".MyContentProvider"
android:enabled="true"
android:authorities="com.padd.myapp.MyContentProvider">
</provider>

receiver
receiver 태그를 추가하면 APP을 띄우지 않고서도 브로드캐스트 수신자를 등록할 수 있다. 브로드캐스트 수신자는 한번 등록되고 나면 APP에 의해 일치하는 인텐트가 방송될 때마다 실행되는 전역 이벤트 리스너와 같다. 브로드캐스트 수신자를 매니페스트에 등록함으로써, 여러분은 이 처리를 완전히 자립적으로 만들 수 있다. 만일 일치하는 인텐트가 방송된다면, 여러분의 APP은 자동으로 시작될 것이며 등록된 브로드캐스트 수신자가 실행될 것이다.

<receiver   android:enabled="true"
android:label="My Broadcast Receiver"
android:name=".MyBroadcastReceiver">
</receiver>

uses-permission
보안 모델의 일부로서, uses-permission 태그는 APP이 올바로 동작하는 데 필요하다고 생각되는 권한을 선언한다. 여러분이 포함시킨 권한은 설치 과정 중 사용자에게 제시되어 권한 부여 혹은 거절이 결정될 것이다. 권한은 많은 네이티브 안드로이드 서비스에 요구되며, 특히 비용이 수반되거나 보안에 관계된 것들(전화 걸기나 SMS 수신 또는 위치기반 서비스 사용 같은)에는 필수적이다. 여러분의 것을 포함한 서드파티 APP 역시 공유된 APP 컴포넌트에 대한 접근을 제공하기에 앞서 권한을 지정할 수 있다.

<uses-permission android:name="android.permission.ACCESS_LOCATION">
</uses-permission>

permission
여러분이 어떤 APP 컴포넌트에 대한 접근을 제한할 수 있으려면, 권한을 매니페스트에 정의할 필요가 있다. 이러한 권한 정의를 생성하는데에는 permission 태그가 사용된다. 이렇게 권한을 정의하고 나면, APP 컴포넌트는 android:permission 속성을 추가해 그 권한을 요청할 수 있다. 다른 APP이 보호된 이들 컴포넌트를 사용할 수 있으려면, 먼저 자신의 매니페스트에 uses-permission 태그를 포함해야 할 것이다.(그리고 그 권한을 부여받아야 할 것 이다.)
여러분은 permission 태그 안에 허용할 권한의 접근 수준과 레이블 그리고 그 권한이 주어짐으로써 오는 위험성에 대한 설명을 담은 외부 리소스를 지정할 수 있다.

<permission android:name="com.padd.DETONATE_DEVICE"
  android:protectionLevel="dangerous"
  android:label="Self Destruct"
  android:description="@string/detonate_description");
</permission>

instrumentation
계측 클래스는 실행 시에 여러분의 액티비티와 서비스를 테스트하기 위한 프레임워크를 제공한다. 이들 클래스는 여러분의 APP과 그가 갖는 시스템 리소스와 상호작용을 모니터 하기 위한 고리를 제공한다. 여러분이 APP을 위해 생성한 테스트 클래스 각각에 대해 새로운 노드 하나씩을 생성한다.

<instrumentation android:label="My Test"
android:name=".MyTestClass"
android:targetPackage="com.padd.aPackage">
</instrumentation>


트랙백 주소 :: http://www.mirwing.com/169/trackback/
옵션
댓글 달기