Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

백그라운드 서비스 만들기

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는 애플리케이션 매니페스트에도 항목이 필요합니다. 이 항목을 <application> 요소의 하위 요소인 <service> 요소로 제공합니다.

        <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를 사용하므로 필터가 필요하지 않습니다. 이것은 또한 동일한 앱 또는 동일한 사용자 ID를 가진 다른 애플리케이션의 구성요소만 서비스에 액세스할 수 있다는 것을 의미합니다.

기본 IntentService 클래스가 있으며 Intent 객체를 사용하여 이 클래스로 작업 요청을 보낼 수 있습니다. 이러한 객체를 구성하고 IntentService에 보내는 절차는 백그라운드 서비스로 작업 요청 보내기에서 설명합니다.