문법:
<service android:description="string resource"
         android:directBootAware=["true" | "false"]
         android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:foregroundServiceType=["camera" | "connectedDevice" |
                                        "dataSync" | "location" | "mediaPlayback" |
                                        "mediaProjection" | "microphone" | "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 서브클래스)를 애플리케이션의 구성요소 중 하나로 선언합니다. 활동과 달리 서비스는 시각적 사용자 인터페이스가 없습니다. 서비스는 오래 실행되는 백그라운드 작업이나 다른 애플리케이션에서 호출할 수 있는 리치 커뮤니케이션 API를 구현하는 데 사용합니다.

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

참고: Android 8.0(API 수준 26) 이상에서는 앱이 백그라운드에서 실행되는 동안 할 수 있는 작업에 시스템에서 제한을 둡니다. 자세한 내용은 백그라운드 실행 제한백그라운드 위치 액세스 제한을 설명하는 가이드를 참고하세요.

속성
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로 설정하면 이 서비스는 나머지 시스템에서 분리된 특수한 프로세스 아래에서 실행되고 자체적인 권한이 없습니다. Service 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