[Android] AndroidManifest.xml 서비스(service) 속성의 종류 및 설명: android:exported, android:isolatedProcess, android:permission, android:foregroundServiceType
<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>
포함 가능한 항목:
설명(description):
서비스(Service)를 애플리케이션의 컴포넌트로 선언하는 부분입니다. 액티비티와는 달리 서비스는 보여지는 유저 인터페이스가 없습니다. 주로 오래 지속되는 백그라운드 오퍼레이션이나 다른 애플리케이션으로부터 호출되는 많은 통신 API(rich communications API)를 구현하는데에 사용됩니다.
모든 서비스는 매너페스트 파일의 <service>에서 선언되어야만 합니다. 이 곳에 선언되지 않은 서비스는 시스템에서 보여지지 않으며 절대 실행되지 않습니다.
attributes:
- android:description
- 사용자에게 서비스를 설명하는 문자열입니다. 사용자 인터페이스의 다른 문자열처럼 현지화될 수 있도록 이 레이블 또한 스트링 리소스를 참조하도록 설정해야합니다.
- android:directBootAware참고: 직접 부팅 시 애플리케이션의 서비스는 기기에서 보호하는 저장소에 저장된 데이터에만 액세스할 수 있습니다.
- 서비스가 직접 부팅을 인식하는지 나타냅니다. 즉, 사용자가 기기를 잠금 해제하기 전에 실행할 수 있는지 여부를 의미합니다. 디폴트값은 “false”입니다.
- android:enabled
- 시스템에 의해 서비스가 인스턴스화 될 수 있는지를 의미합니다. 디폴트값은 “true”입니다. <application>의 엘리먼트에도 <enabled> 속성이 있습니다. 따라서 <application>과 <service>속성 모두 “true”로 되어 있어야(두 속성 모두 디폴트값은 true입니다) 서비스가 활성화됩니다. 둘 중 하나라도 “false“로 설정되어 있으면 서비스가 비활성화되고 인스턴스화 될 수 없습니다.
- andorid:exported
- 다른 애플리케이션의 컴포넌트가 서비스를 호출하거나 서비스와 상호작용 할 수 있는지를 결정합니다. 값이 “false”이면 같은 user ID를 가진 동일한 애플리케이션 내에서만 서비스를 시작하거나 bind할 수 있습니다. 디폴트값은 해당 서비스가 intent filter를 포함하고 있는지의 여부에 따라 다릅니다. intent filter가 없다는 것은 서비스가 해당 애플리케이션 내에서만 사용하도록 만들어졌다는 의미입니다. 따라서 이 때의 디폴트값은 “false”입니다. 반면 intent filter가 하나라도 있다면 이는 external use를 염두에 두고 만들었다는 뜻이므로 “true”가 디폴트값으로 설정됩니다.
- android:foregroundServiceType특정 서비스에 여러개의 foregound 서비스 타입을 지정할 수 있습니다.
- 서비스가 특정 사용 사례를 만족시키는 foregound service인지를 지정합니다. 예를 들어 “location”의 foreground 서비스 타입은 일반적으로 사용자 시작 작업을 계속(continue a user-initiated action)하기 위해 앱이 디바이스의 현재 위치를 가져온다는 것을 의미합니다.
- android:icon매너페스트 파일에서 설정했든, <application>요소에 의해 설정되었든 서비스 아이콘은 모든 서비스의 intent filter의 디폴트 아이콘이기도 합니다(<intent-filter> 요소의 icon 속성 참조).
- 서비스를 나타내는 아이콘입니다. 이 속성은 이미지 정의를 포함하는 drawable 리소스에 대한 찹조로 설정해야만 합니다. 만약 설정하지 않는다면, 애플리케이션 전체에 지정된 아이콘이 사용됩니다(<application>요소의 icon속성 참조)
- android:isolatedProcess
- true로 설정하면 이 서비스는 다른 시스템과 분리되어 자체 권한이 없는 특수한 프로세스에서 실행됩니다. 이 서비스와의 유일한 통신 방법은 Service API(binding과 starting)를 통한 것입니다.
- android:label이곳에서 설정되었든 <application> 요소에서 설정되었든, 서비스의 레이블은 모든 서비스 intent filter의 디폴트 레이블입니다(<intent-filter> 요소의 label 속성 참조).
- 레이블은 유저 인터페이스의 다른 문자열처럼 현지화될 수 있도록 스트링 리소스를 참조하도록 설정해야합니다. 하지만 개발상의 편의를 위해 raw 스트링으로도 설정할 수는 있습니다.
- 사용자에게 보여지는 서비스의 이름입니다. 만약 이 속성을 설정하지 않으면 전체 애플리케이션에 설정된 레이블이 대신 사용됩니다(<application>요소의 label속성을 참고하십시오).
- android:name애플리케이션을 발행한 이후에는, 이 이름을 변경해서는 안됩니다.(android:exported=”false”로 설정하지 않은 경우에).
- 디폴트값은 없으며, 이름을 꼭 설정해야합니다.
- 서비스를 구현하는 Service 서브클래스의 이름을 의미하며, 이는 fully qualified 클래스 이름이어야 합니다(예: com.example.project.RoomService). 하지만 간단히 표현하여 이름의 첫 문자가 마침표이면(예: .RoomService) <manifest> 요소에 지정된 패키지 이름에 추가됩니다.
- android:permission이 속성을 설정하지 않으면 <application> 요소의 permission 속성으로 설정된 권한이 해당 서비스에 적용됩니다. 만약 두 가지 속성 모두 설정되지 않으면, 서비스는 권한으로 보호되지 않습니다.
- 권한에 대한 자세한 내용은 소개의 Permissions 섹션과 별도의 문서인 Security and Permissions를 참조하십시오.
- 서비스를 시작하거나 바인딩하기 위해 엔티티가 가져야 하는 권한의 이름을 의미합니다. 만약 startService(), bindService(), 혹은 stopService()의 호출자에게 이 권한이 부여되지 않으면 메서드가 작동하지 않으며 Intent object가 서비스에 전달되지 않습니다.
- android:process
서비스를 실행할 프로세스의 이름입니다. 일반적으로는 애플리케이션의 모든 구성요소가 해당 애플리케이션을 위해 생성된 기본 프로세스에서 실행됩니다. 이 프로세스는 애플리케이션 패키지와 이름이 동일합니다. 요소의 process 특성은 모든 구성요소에 대해 서로 다른 기본값을 설정할 수 있습니다. 그러나 구성요소가 자체적인 process 특성으로 기본값을 재정의하고 여러 프로세스에 애플리케이션을 분산하도록 허용할 수 있습니다. 이 특성에 할당된 이름이 콜론(‘:’)으로 시작되는 경우, 필요할 때 애플리케이션 전용 새 프로세스가 생성되며 이 서비스가 해당 프로세스에서 실행됩니다. 프로세스 이름이 소문자로 시작되는 경우, 해당 서비스는 그 이름을 가진 전역 프로세스에서 실행됩니다. 다만 그렇게 할 수 있는 권한이 있어야 합니다. 이렇게 하면 여러 애플리케이션의 구성요소가 프로세스 하나를 공유하므로 리소스 사용량이 감소합니다.
[REFERENCE]