<service>

구문:
<service android:description="string resource"
         android:directBootAware=["true" | "false"]
         android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:foregroundServiceType=["connectedDevice" | "dataSync" |
                                        "location" | "mediaPlayback" | "mediaProjection" |
                                        "phoneCall"]
         android:icon="drawable resource"
         android:isolatedProcess=["true" | "false"]
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string" >
    . . .
</service>
포함된 위치:
<application>
포함 가능한 항목:
<intent-filter>
<meta-data>
설명:
서비스(Service 하위 클래스)를 애플리케이션의 구성요소 중 하나로 선언합니다. Activity와 달리, 서비스는 시각적 사용자 인터페이스가 없습니다. 서비스는 오래 실행되는 백그라운드 작업이나 다른 애플리케이션에서 호출할 수 있는 리치 커뮤니케이션 API를 구현하는 데 사용합니다.

모든 서비스는 매니페스트 파일의 <service> 요소로 나타내야 합니다. 여기에 선언되지 않은 서비스는 시스템에 표시되지 않으며 실행되지 않습니다.

특성:
android:description
서비스를 사용자에게 설명하는 문자열입니다. 라벨은 사용자 인터페이스의 다른 문자열처럼 현지화할 수 있도록 문자열 리소스에 대한 참조로 설정해야 합니다.
android:directBootAware

서비스가 직접 부팅을 인식하는지 나타냅니다. 즉, 사용자가 기기를 잠금 해제하기 전에 실행할 수 있는지 여부를 의미합니다.

참고: 직접 부팅 시 애플리케이션의 서비스는 기기에서 보호하는 저장소에 저장된 데이터에만 액세스할 수 있습니다.

기본값은 "false"입니다.

android:enabled
시스템이 서비스를 인스턴스화할 수 있는지 여부를 나타냅니다. 이 값이 true인 경우 가능하고 "false"인 경우에는 불가능합니다. 기본값은 "true"입니다.

<application> 요소는 서비스를 비롯한 모든 애플리케이션 구성요소에 적용하는 자신의 enabled 특성을 갖고 있습니다. <application><service> 특성은 모두 시스템이 서비스를 인스턴스화할 수 있도록 "true"(기본값)여야 합니다. 둘 중 하나라도 "false"일 경우, 서비스는 비활성화되고 인스턴스화될 수 없습니다.

android:exported
다른 애플리케이션의 구성요소가 서비스를 호출하거나 서비스와 상호작용할 수 있는지 여부를 나타냅니다. 호출이나 상호작용이 가능하면 "true"이고, 그렇지 않을 경우 "false"입니다. 이 값이 "false"이면 동일한 애플리케이션의 구성요소 또는 동일한 사용자 ID를 가지고 있는 애플리케이션만 서비스를 시작하거나 서비스에 바인딩할 수 있습니다.

기본값은 서비스가 인텐트 필터를 포함하는지 여부에 따라 다릅니다. 필터가 없는 경우 정확한 클래스 이름을 지정해야 서비스를 호출할 수 있습니다. 이는 (타인이 클래스 이름을 모르므로) 서비스가 애플리케이션 내부 용도로만 고안되었음을 암시합니다. 그러므로 이 경우에 기본값은 "false"입니다. 반면에 필터가 한 개 이상 있는 경우 서비스가 외부 용도로 고안되었음을 암시하므로 기본값은 "true"입니다.

이 특성 외에도 서비스를 다른 애플리케이션에 노출되지 않도록 제한하는 방법이 있습니다. 서비스와 상호작용할 수 있는 외부 엔터티를 제한하는 권한을 사용할 수도 있습니다(permission 특성을 참조하세요).

android:foregroundServiceType

서비스가 특정 사용 사례를 만족하는 포그라운드 서비스임을 지정합니다. 예를 들어 "location"라는 포그라운드 서비스 유형은 앱이 기기의 현재 위치를 가져올 수 있다는 것을 의미합니다. 일반적으로는 기기 위치와 관련된 사용자가 시작한 작업을 계속하기 위한 목적입니다.

여러 개의 포그라운드 서비스 유형을 특정 서비스로 할당할 수 있습니다.

android:icon
서비스를 나타내는 아이콘입니다. 이 특성은 이미지 정의를 포함하는 드로어블 리소스에 대한 참조로 설정해야 합니다. 이 특성을 설정하지 않으면 애플리케이션에 전체적으로 지정된 아이콘이 대신 사용됩니다(<application> 요소의 icon 특성 참조).

여기에 설정했거나 <application> 요소가 설정한 서비스 아이콘은 모든 서비스의 인텐트 필터에 대한 기본 아이콘입니다(<intent-filter> 요소의 icon 특성 참조).

android:isolatedProcess
이 값을 true로 설정하면 이 서비스는 나머지 시스템에서 분리된 특수한 프로세스 아래에서 실행되고 자체적인 권한이 없습니다. 서비스 API(바인드 및 시작)를 통해서만 서비스와 통신할 수 있습니다.
android:label
사용자에게 표시될 수 있는 서비스의 이름입니다. 이 특성을 설정하지 않으면 애플리케이션 전체에 대해 설정한 라벨이 대신 사용됩니다(<application> 요소의 label 특성 참조).

여기에 설정했거나 <application> 요소가 설정한 서비스 라벨은 모든 서비스의 인텐트 필터에 대한 기본 라벨입니다(<intent-filter> 요소의 label 특성 참조).

라벨은 사용자 인터페이스의 다른 문자열처럼 현지화할 수 있도록 문자열 리소스에 대한 참조로 설정해야 합니다. 그러나 애플리케이션을 개발하는 동안 편의상 라벨을 원시 문자열로 설정할 수도 있습니다.

android:name
서비스를 구현하는 Service 하위 클래스의 이름입니다. 이 값은 정규화된 클래스 이름(예: "com.example.project.RoomService")이어야 합니다. 그러나 요컨대 이름의 첫 문자가 마침표인 경우(예: ".RoomService") 이는 <manifest> 요소에 지정된 패키지 이름에 추가됩니다.

애플리케이션을 게시하고 나면 (android:exported="false"를 설정하지 않은 경우) 이 이름을 변경해서는 안 됩니다.

기본값은 없습니다. 이름을 지정해야 합니다.

android:permission
서비스를 시작하거나 서비스에 바인딩하기 위해 엔터티가 반드시 가져야 하는 권한의 이름입니다. startService(), bindService() 또는 stopService()의 호출자가 이 권한을 부여하지 않았을 경우, 이 메서드는 작동하지 않고 인텐트 객체가 서비스에 전달되지 않습니다.

이 특성을 설정하지 않는 경우 <application> 요소의 permission 특성이 설정한 권한을 서비스에 적용합니다. 둘 중 어느 특성도 설정하지 않은 경우 권한이 서비스를 보호하지 않습니다.

권한에 대한 자세한 내용은 소개에 있는 권한 섹션과 별도의 문서인 보안 및 권한을 참조하세요.

android:process
서비스를 실행할 프로세스의 이름입니다. 일반적으로는 애플리케이션의 모든 구성요소가 해당 애플리케이션을 위해 생성된 기본 프로세스에서 실행됩니다. 이 프로세스는 애플리케이션 패키지와 이름이 동일합니다. <application> 요소의 process 특성은 모든 구성요소에 대해 서로 다른 기본값을 설정할 수 있습니다. 그러나 구성요소가 자체적인 process 특성으로 기본값을 재정의하고 여러 프로세스에 애플리케이션을 분산하도록 허용할 수 있습니다.

이 특성에 할당된 이름이 콜론(':')으로 시작되는 경우, 필요할 때 애플리케이션 전용 새 프로세스가 생성되며 이 서비스가 해당 프로세스에서 실행됩니다. 프로세스 이름이 소문자로 시작되는 경우, 해당 서비스는 그 이름을 가진 전역 프로세스에서 실행됩니다. 다만 그렇게 할 수 있는 권한이 있어야 합니다. 이렇게 하면 여러 애플리케이션의 구성요소가 프로세스 하나를 공유하므로 리소스 사용량이 감소합니다.

참고 항목:
<application>
<activity>
추가된 레벨:
API 레벨 1