백그라운드 서비스 만들기

IntentService 클래스는 실행을 위한 간단한 구조를 제공합니다. 단일 백그라운드 스레드에서 수행됩니다. 따라서 장기 실행 작업을 처리할 수 있습니다. 새 버전을 출시할 수 있습니다 또한 IntentService는 대부분의 사용자 인터페이스 수명 주기 이벤트의 영향을 받지 않으므로 AsyncTask를 종료하는 상황에서도 계속 실행됩니다.

IntentService에는 다음과 같은 몇 가지 제한사항이 있습니다.

  • 사용자 인터페이스와 직접 상호작용할 수 없습니다. UI에 결과를 넣으려면 Activity로 전송해야 합니다.
  • 작업 요청이 순차적으로 실행됩니다. 클러스터에서 작업이 실행 중인 경우 IntentService를 호출하고 다른 요청을 보내면 이 요청은 다음 시간까지 대기합니다. 첫 번째 작업이 완료됩니다
  • IntentService에서 실행되는 작업은 중단할 수 없습니다.

그러나 대부분의 경우 IntentService를 사용하는 것이 선호됩니다. 간단한 백그라운드 작업을 수행할 수 있습니다

이 가이드에서는 다음 작업을 실행하는 방법을 보여줍니다.

수신 인텐트 처리

앱의 IntentService 구성요소를 만들려면 다음과 같은 클래스를 정의합니다. IntentService를 확장하고 그 안에서 onHandleIntent()를 재정의합니다. 예를 들면 다음과 같습니다.

Kotlin

class RSSPullService : IntentService(RSSPullService::class.simpleName)

    override fun onHandleIntent(workIntent: Intent) {
        // Gets data from the incoming Intent
        val dataString = workIntent.dataString
        ...
        // Do work here, based on the contents of dataString
        ...
    }
}

자바

public class RSSPullService extends IntentService {
    @Override
    protected void onHandleIntent(Intent workIntent) {
        // Gets data from the incoming Intent
        String dataString = workIntent.getDataString();
        ...
        // Do work here, based on the contents of dataString
        ...
    }
}

다음과 같은 일반 Service 구성요소의 다른 콜백은 다음과 같습니다. onStartCommand()IntentService입니다. IntentService에서는 다음을 피해야 합니다. 이러한 콜백을 재정의합니다.

IntentService 생성에 관한 자세한 내용은 IntentService 클래스를 통해 할당됩니다.

매니페스트에서 인텐트 서비스 정의

IntentService는 애플리케이션 매니페스트에도 항목이 필요합니다. 이 항목을 <service> 다음 요소의 하위 요소인 <application> 요소:

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name">
        ...
        <!--
            Because android:exported is set to "false",
            the service is only available to this app.
        -->
        <service
            android:name=".RSSPullService"
            android:exported="false"/>
        ...
    </application>

android:name 속성은 IntentService입니다.

참고로 <service> 요소가 포함되지 않은 요소 인텐트 필터. 이 서비스에 작업 요청을 보내는 Activity는 다음을 사용합니다. 명시적 Intent이므로 필터가 필요하지 않습니다. 또한 같은 앱 또는 서비스에 액세스할 수 있습니다

이제 기본 IntentService 클래스가 있으므로 작업 요청을 보낼 수 있습니다. Intent 객체로 변환합니다. 이러한 객체를 구성하는 절차 IntentService로 전송하는 방법은 다음 페이지를 참고하세요. 백그라운드 서비스에 작업 요청을 보냅니다.