백그라운드 서비스에 작업 요청 전송

이전 과정에서는 JobIntentService 클래스를 만드는 방법을 보여주었습니다. 이번 과정에서는 JobIntentService를 트리거하여 Intent로 작업을 대기열에 추가해 작업을 실행하는 방법을 보여줍니다. 이 Intent는 선택적으로 JobIntentService의 데이터를 포함하여 처리할 수 있습니다.

작업 요청을 만들어 JobIntentService에 전송

작업 요청을 만들어 JobIntentService에 전송하려면 Intent를 만들고 대기열에 추가하여 enqueueWork() 호출로 실행되도록 합니다. 선택적으로 JobIntentService가 처리할 인텐트에 데이터를 인텐트 extras 형식으로 추가할 수 있습니다. 인텐트 만들기에 관한 자세한 내용은 인텐트와 인텐트 필터의 인텐트 빌드 섹션을 읽어보세요.

다음 코드 스니펫은 이 프로세스를 보여줍니다.

  1. 이름이 RSSPullService라는 JobIntentService의 새로운 Intent를 만듭니다.

    Kotlin

        /*
         * Creates a new Intent to start the RSSPullService
         * JobIntentService. Passes a URI in the
         * Intent's "data" field.
         */
        serviceIntent = Intent().apply {
            putExtra("download_url", dataUrl)
        }
        

    자바

        /*
         * Creates a new Intent to start the RSSPullService
         * JobIntentService. Passes a URI in the
         * Intent's "data" field.
         */
        serviceIntent = new Intent();
        serviceIntent.putExtra("download_url", dataUrl));
        
  2. enqueueWork()를 호출합니다.

    Kotlin

        private const val RSS_JOB_ID = 1000
        RSSPullService.enqueueWork(context, RSSPullService::class.java, RSS_JOB_ID, serviceIntent)
        

    자바

        // Starts the JobIntentService
        private static final int RSS_JOB_ID = 1000;
        RSSPullService.enqueueWork(getContext(), RSSPullService.class, RSS_JOB_ID, serviceIntent);
        

활동이나 프래그먼트의 어디에서나 작업 요청을 전송할 수 있습니다. 예를 들어 사용자 입력을 먼저 가져와야 한다면 버튼 클릭이나 유사한 동작에 응답하는 콜백에서 요청을 전송할 수 있습니다.

enqueueWork()를 호출하고 나면 JobIntentServiceonHandleWork() 메서드에서 정의된 작업을 실행한 다음 스스로 중지합니다.

다음 단계는 작업 요청의 결과를 원래 활동이나 프래그먼트에 다시 보고하는 것입니다. 다음 과정에서는 BroadcastReceiver로 이 작업을 실행하는 방법을 보여줍니다.