IntentService
클래스는 실행을 위한 간단한 구조를 제공합니다.
단일 백그라운드 스레드에서 수행됩니다. 따라서 장기 실행 작업을 처리할 수 있습니다.
새 버전을 출시할 수 있습니다 또한
IntentService
는 대부분의 사용자 인터페이스 수명 주기 이벤트의 영향을 받지 않으므로
AsyncTask
를 종료하는 상황에서도 계속 실행됩니다.
IntentService
에는 다음과 같은 몇 가지 제한사항이 있습니다.
-
사용자 인터페이스와 직접 상호작용할 수 없습니다. UI에 결과를 넣으려면
Activity
로 전송해야 합니다. -
작업 요청이 순차적으로 실행됩니다. 클러스터에서 작업이 실행 중인 경우
IntentService
를 호출하고 다른 요청을 보내면 이 요청은 다음 시간까지 대기합니다. 첫 번째 작업이 완료됩니다 -
IntentService
에서 실행되는 작업은 중단할 수 없습니다.
그러나 대부분의 경우 IntentService
를 사용하는 것이 선호됩니다.
간단한 백그라운드 작업을
수행할 수 있습니다
이 가이드에서는 다음 작업을 실행하는 방법을 보여줍니다.
IntentService
의 자체 서브클래스를 만듭니다.- 필수 콜백 메서드
onHandleIntent()
를 만듭니다. 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
로 전송하는 방법은 다음 페이지를 참고하세요.
백그라운드 서비스에 작업 요청을 보냅니다.