Android 작업 스케줄러Android Job Scheduler

이 가이드에서는 android 5.0 (API 레벨 21) 이상을 실행 하는 Android 장치에서 사용할 수 있는 Android 작업 스케줄러 API를 사용 하 여 백그라운드 작업을 예약 하는 방법을 설명 합니다.This guide discusses how to schedule background work using the Android Job Scheduler API, which is available on Android devices running Android 5.0 (API level 21) and higher.

개요Overview

Android 응용 프로그램을 사용자에 게 응답성을 유지 하는 가장 좋은 방법 중 하나는 백그라운드에서 복잡 하거나 오래 실행 되는 작업이 수행 되도록 하는 것입니다.One of the best ways to keep an Android application responsive to the user is to ensure that complex or long running work is performed in the background. 그러나 백그라운드 작업은 사용자의 장치 환경에 부정적인 영향을 주지 않습니다.However, it is important that background work will not negatively impact the user's experience with the device.

예를 들어 백그라운드 작업은 3 ~ 4 분 마다 웹 사이트를 폴링하여 특정 데이터 집합에 대 한 변경 내용을 쿼리할 수 있습니다.For example, a background job might poll a website every three or four minutes to query for changes to a particular dataset. 심각 하지는 않지만 배터리 수명에 심각한 영향을 미칠 수 있습니다.This seems benign, however it would have a disastrous impact on battery life. 응용 프로그램은 장치를 반복적으로 절전 모드에서 해제 하 고, CPU를 더 높은 전원 상태로 상승 하 고, 라디오를 켜고, 네트워크를 요청 하 고, 결과를 처리 합니다.The application will repeatedly wake up the device, elevate the CPU to a higher power state, power up the radios, make the network requests, and then processing the results. 장치가 즉시 작동 중단 되 고 저전원 유휴 상태로 복귀 되지 않으므로 성능이 저하 됩니다.It gets worse because the device will not immediately power down and return to the low-power idle state. 잘못 예약 된 백그라운드 작업은 불필요 하 고 과도 한 전원 요구 사항으로 장치를 실수로 유지할 수 있습니다.Poorly scheduled background work may inadvertently keep the device in a state with unnecessary and excessive power requirements. 이 처럼 보입니다. (웹 사이트 폴링)는 상대적으로 짧은 시간 안에 장치를 사용할 수 없게 렌더링 합니다.This seemingly innocent activity (polling a website) will render the device unusable in a relatively short period of time.

Android는 백그라운드에서 작업을 수행 하는 데 도움이 되는 다음과 같은 Api를 제공 하지만 지능적 작업 예약에는 충분 하지 않습니다.Android provides the following APIs to help with performing work in the background but by themselves they are not sufficient for intelligent job scheduling.

  • 의도 서비스 – 의도 서비스는 작업을 수행 하는 데 유용 하지만 작업을 예약 하는 방법은 제공 하지 않습니다.Intent Services – Intent Services are great for performing the work, however they provide no way to schedule work.
  • AlarmManager – 이러한 api는 작업 예약만 허용 하지만 실제로 작업을 수행할 수 있는 방법은 제공 하지 않습니다.AlarmManager – These APIs only allow work to be scheduled but provide no way to actually perform the work. 또한 AlarmManager는 시간 기반 제약 조건만 허용 합니다. 즉, 특정 시간에 또는 특정 기간이 경과한 후에 알람을 발생 시킵니다.Also, the AlarmManager only allows time based constraints, which means raise an alarm at a certain time or after a certain period of time has elapsed.
  • Android 앱 – 브로드캐스트 수신기 는 시스템 차원의 이벤트 또는 의도에 대 한 응답으로 작업을 수행 하도록 브로드캐스트 수신기를 설정할 수 있습니다.Broadcast Receivers – An Android app can setup broadcast receivers to perform work in response to system-wide events or Intents. 그러나 브로드캐스트 수신기는 작업을 실행 해야 하는 경우에 대 한 제어를 제공 하지 않습니다.However, broadcast receivers don't provide any control over when the job should be run. 또한 Android 운영 체제의 변경 내용으로 인해 브로드캐스트 수신기가 작동 하는 시기 또는 응답할 수 있는 작업 종류가 제한 됩니다.Also changes in the Android operating system will restrict when broadcast receivers will work, or the kinds of work that they can respond to.

백그라운드 작업을 효율적으로 수행 하는 두 가지 주요 기능 ( 백그라운드 작업 또는 _작업_이 라고도 함)은 다음과 같습니다.There are two key features to efficiently performing background work (sometimes referred to as a background job or a job):

  1. 작업 –를 지능적으로 예약 하는 것은 응용 프로그램이 백그라운드에서 작업을 수행 하는 경우 적절 한 시민으로 작업을 수행 하는 것이 중요 합니다.Intelligently scheduling the work – It is important that when an application is doing work in the background that it does so as a good citizen. 응용 프로그램에서 작업 실행을 요구 하지 않아야 하는 것이 가장 좋습니다.Ideally, the application should not demand that a job be run. 대신, 응용 프로그램은 작업을 실행할 수 있는 경우 충족 해야 하는 조건을 지정 하 고 조건이 충족 될 때 작업을 수행할 운영 체제를 사용 하 여 해당 작업을 예약 해야 합니다.Instead, the application should specify conditions that must be met for when the job can run, and then schedule that job with the operating system that will perform the work when the conditions are met. 이렇게 하면 Android에서 작업을 실행 하 여 장치에서 효율성을 최대한 유지할 수 있습니다.This allows Android to run the job to ensure maximum efficiency on the device. 예를 들어 네트워킹에 관련 된 오버 헤드를 최대한 활용 하기 위해 네트워크 요청을 동시에 실행 하도록 일괄 처리할 수 있습니다.For example, network requests may be batched to run all at the same time to make maximum use of overhead involved with networking.
  2. 백그라운드 작업을 수행 하는 코드 – 작업을 캡슐화 하는 작업은 사용자 인터페이스와 독립적으로 실행 될 수 있는 불연속 구성 요소에 캡슐화 해야 하며, 일부 작업에 대해 작업이 완료 되지 않으면 비교적 쉽게 일정을 조정할 수 있습니다. 문서화.Encapsulating the work – The code to perform the background work should be encapsulated in a discrete component that can be run independently of the user interface and will be relatively easy to reschedule if the work fails to complete for some reason.

Android 작업 Scheduler는 흐름 API를 제공 하는 Android 운영 체제에 기본 제공 되는 프레임 워크로 서 백그라운드 작업 예약을 간소화 합니다.The Android Job Scheduler is a framework built in to the Android operating system that provides a fluent API to simplify scheduling background work. Android 작업 스케줄러는 다음 형식으로 구성 됩니다.The Android Job Scheduler consists of the following types:

  • Android.App.Job.JobScheduler은 Android 응용 프로그램을 대신 하 여 작업을 예약 하 고, 실행 하 고, 필요한 경우 작업을 취소 하는 데 사용 되는 시스템 서비스입니다.The Android.App.Job.JobScheduler is a system service that is used to schedule, execute, and if necessary cancel, jobs on behalf of an Android application.
  • Android.App.Job.JobService는 응용 프로그램의 주 스레드에서 작업을 실행 하는 논리를 사용 하 여 확장 해야 하는 추상 클래스입니다.An Android.App.Job.JobService is an abstract class that must be extended with the logic that will run the job on the main thread of the application. 즉, JobService는 작업을 비동기적으로 수행 하는 방법을 담당 합니다.This means that the JobService is responsible for how the work is to be performed asynchronously.
  • 작업을 실행 해야 하는 경우 Android.App.Job.JobInfo 개체에는 Android를 안내 하는 기준이 포함 됩니다.An Android.App.Job.JobInfo object holds the criteria to guide Android when the job should run.

Android 작업 스케줄러를 사용 하 여 작업을 예약 하려면 Xamarin.ios 응용 프로그램에서 JobService 클래스를 확장 하는 클래스에 코드를 캡슐화 해야 합니다.To schedule work with the Android Job Scheduler, a Xamarin.Android application must encapsulate the code in a class that extends the JobService class. JobService은 작업 수명 중에 호출할 수 있는 세 가지 수명 주기 메서드를 포함 합니다.JobService has three lifecycle methods that can be called during the lifetime of the job:

  • Bool OnStartJob (JobParameters 매개 변수) –이 메서드는 JobScheduler에서 작업을 수행 하기 위해 호출 되 고 응용 프로그램의 주 스레드에서 실행 됩니다.bool OnStartJob(JobParameters parameters) – This method is called by the JobScheduler to perform work, and runs on the main thread of the application. 작업을 비동기적으로 수행 하 고 남은 작업이 있는 경우 true false 하거나 작업을 완료 한 경우에는 JobService 책임이 있습니다.It is the responsibility of the JobService to asynchronously perform the work and true if there is work remaining, or false if the work is done.

    JobScheduler에서이 메서드를 호출 하는 경우 작업 기간 동안 Android에서 wakelock을 요청 하 고 유지 합니다.When the JobScheduler calls this method, it will request and retain a wakelock from Android for the duration of the job. 작업이 완료 되 면 JobFinished 메서드 (다음에 설명)를 호출 하 여이 사실을 JobScheduler에 알리는 JobService 책임이 있습니다.When the job is finished, it is the responsibility of the JobService to tell the JobScheduler of this fact by call the JobFinished method (described next).

  • Jobfinished (Jobfinished parameters, Bool needsReschedule) –이 메서드는 JobService에 의해 호출 되어야 작업이 완료 되었음을 JobScheduler에 게 알립니다.JobFinished(JobParameters parameters, bool needsReschedule) – This method must be called by the JobService to tell the JobScheduler that the work is done. JobFinished를 호출 하지 않으면 JobScheduler wakelock 제거 되지 않으므로 불필요 한 배터리가 소모 됩니다.If JobFinished is not called, the JobScheduler will not remove the wakelock, causing unnecessary battery drain.

  • Bool OnStopJob (JobParameters 매개 변수) –이 작업은 Android에서 작업을 중간에 중지할 때 호출 됩니다.bool OnStopJob(JobParameters parameters) – This is called when the job is prematurely stopped by Android. 다시 시도 조건에 따라 작업을 다시 예약 해야 하는 경우에는 true을 반환 해야 합니다 (아래에서 자세히 설명).It should return true if the job should be rescheduled based on the retry criteria (discussed below in more detail).

작업이 실행 될 수 있는 시기를 제어 하는 제약 조건이트리거 를 지정할 수 있습니다.It is possible to specify constraints or triggers that will control when a job can or should run. 예를 들어 장치가 요금을 청구 하거나 사진을 만들 때 작업을 시작 하는 경우에만 실행 되도록 작업을 제한할 수 있습니다.For example, it is possible to constrain a job so that it will only run when the device is charging or to start a job when a picture is taken.

이 가이드에서는 JobService 클래스를 구현 하 고 JobScheduler를 사용 하 여 예약 하는 방법에 대해 자세히 설명 합니다.This guide will discuss in detail how to implement a JobService class and schedule it with the JobScheduler.

요구 사항Requirements

Android 작업 스케줄러에는 Android API 레벨 21 (Android 5.0) 이상이 필요 합니다.The Android Job Scheduler requires Android API level 21 (Android 5.0) or higher.

Android 작업 스케줄러 사용Using the Android Job Scheduler

Android JobScheduler API를 사용 하는 세 가지 단계가 있습니다.There are three steps for using the Android JobScheduler API:

  1. 작업을 캡슐화 할 JobService 형식을 구현 합니다.Implement a JobService type to encapsulate the work.
  2. JobInfo.Builder 개체를 사용 하 여 작업을 실행 하기 위한 JobScheduler 조건을 보유 하는 JobInfo 개체를 만듭니다.Use a JobInfo.Builder object to create the JobInfo object that will hold the criteria for the JobScheduler to run the job.
  3. JobScheduler.Schedule를 사용 하 여 작업을 예약 합니다.Schedule the job using JobScheduler.Schedule.

JobService 구현Implement a JobService

Android 작업 스케줄러 라이브러리에서 수행 하는 모든 작업은 Android.App.Job.JobService 추상 클래스를 확장 하는 형식에서 수행 해야 합니다.All work performed by the Android Job Scheduler library must be done in a type that extends the Android.App.Job.JobService abstract class. JobService 만들기는 Android framework를 사용 하 여 Service을 만드는 것과 매우 비슷합니다.Creating a JobService is very similar to creating a Service with the Android framework:

  1. JobService 클래스를 확장 합니다.Extend the JobService class.
  2. ServiceAttribute를 사용 하 여 하위 클래스를 장식 하 고 Name 매개 변수를 패키지 이름 및 클래스 이름으로 구성 된 문자열로 설정 합니다 (다음 예제 참조).Decorate the subclass with the ServiceAttribute and set the Name parameter to a string that is made up of the package name and the name of the class (see the following example).
  3. ServiceAttributePermission 속성을 android.permission.BIND_JOB_SERVICE문자열로 설정 합니다.Set the Permission property on the ServiceAttribute to the string android.permission.BIND_JOB_SERVICE.
  4. 작업을 수행 하는 코드를 추가 하 여 OnStartJob 메서드를 재정의 합니다.Override the OnStartJob method, adding the code to perform the work. Android는 응용 프로그램의 주 스레드에서이 메서드를 호출 하 여 작업을 실행 합니다.Android will invoke this method on the main thread of the application to run the job. 응용 프로그램이 차단 되는 것을 방지 하기 위해 스레드에서 몇 밀리초를 수행 해야 하는 작업은 더 오래 걸릴 수 있습니다.Work that will take longer that a few milliseconds should be performed on a thread to avoid blocking the application.
  5. 작업이 완료 되 면 JobServiceJobFinished 메서드를 호출 해야 합니다.When the work is done, the JobService must call the JobFinished method. 이 메서드는 JobService 작업의 수행을 JobScheduler에 알리는 방법입니다.This method is how JobService tells the JobScheduler that work is done. JobFinished를 호출 하지 않으면 장치에서 불필요 한 요구 사항이 발생 하 여 배터리 수명을 단축할 JobService.Failure to call JobFinished will result in the JobService putting unnecessary demands on the device, shortening the battery life.
  6. OnStopJob 메서드를 재정의 하는 것도 좋습니다.It is a good idea to also override the OnStopJob method. 이 메서드는 작업이 완료 되기 전에 작업이 종료 될 때 Android에서 호출 되며, JobService 제공 하 여 리소스를 적절 하 게 삭제할 수 있는 기회를 제공 합니다.This method is called by Android when the job is being shut down before it is finished and provides the JobService with an opportunity to properly dispose of any resources. 작업을 다시 예약 해야 하는 경우이 메서드는 true을 반환 하 고, 작업을 다시 실행 하기 위해 desireable 않는 경우에는 false 합니다.This method should return true if it is necessary to reschedule the job, or false if it is not desireable to re-run the job.

다음 코드는 TPL을 사용 하 여 작업을 비동기적으로 수행 하는 응용 프로그램에 대 한 가장 간단한 JobService의 예입니다.The following code is an example of the simplest JobService for an application, using the TPL to asynchronously perform some work:

[Service(Name = "com.xamarin.samples.downloadscheduler.DownloadJob", 
         Permission = "android.permission.BIND_JOB_SERVICE")]
public class DownloadJob : JobService
{
    public override bool OnStartJob(JobParameters jobParams)
    {            
        Task.Run(() =>
        {
            // Work is happening asynchronously
                      
            // Have to tell the JobScheduler the work is done. 
            JobFinished(jobParams, false);
        });

        // Return true because of the asynchronous work
        return true;  
    }

    public override bool OnStopJob(JobParameters jobParams)
    {
        // we don't want to reschedule the job if it is stopped or cancelled.
        return false; 
    }
}

작업을 예약 하는 JobInfo 만들기Creating a JobInfo to schedule a job

Xamarin Android 응용 프로그램은 JobService를 직접 인스턴스화하지 않으며 대신 JobSchedulerJobInfo 개체를 전달 합니다.Xamarin.Android applications do not instantiate a JobService directly, instead they will pass a JobInfo object to the JobScheduler. JobScheduler은 요청 된 JobService 개체를 인스턴스화하고 JobInfo의 메타 데이터에 따라 JobService 예약 및 실행 합니다.The JobScheduler will instantiate the requested JobService object, scheduling and running the JobService according to the metadata in the JobInfo. JobInfo 개체는 다음 정보를 포함 해야 합니다.A JobInfo object must contain the following information:

  • JobIdJobScheduler에 대 한 작업을 식별 하는 데 사용 되는 int 값입니다.JobId – this is an int value that is used to identify a job to the JobScheduler. 이 값을 다시 사용 하면 기존 작업이 업데이트 됩니다.Reusing this value will update any existing jobs. 값은 응용 프로그램에 대해 고유 해야 합니다.The value must be unique for the application.
  • Jobservice –이 매개 변수는 JobScheduler에서 작업을 실행 하는 데 사용 해야 하는 형식을 명시적으로 식별 하는 ComponentName입니다.JobService – this parameter is a ComponentName that explicitly identifies the type that the JobScheduler should use to run a job.

이 확장 메서드는 활동과 같은 Android Context를 사용 하 여 JobInfo.Builder을 만드는 방법을 보여 줍니다.This extension method demonstrates how to create a JobInfo.Builder with an Android Context, such as an Activity:

public static class JobSchedulerHelpers
{
    public static JobInfo.Builder CreateJobBuilderUsingJobId<T>(this Context context, int jobId) where T:JobService
    {
        var javaClass = Java.Lang.Class.FromType(typeof(T));
        var componentName = new ComponentName(context, javaClass);
        return new JobInfo.Builder(jobId, componentName);
    }
}

// Sample usage - creates a JobBuilder for a DownloadJob and sets the Job ID to 1.
var jobBuilder = this.CreateJobBuilderUsingJobId<DownloadJob>(1);

var jobInfo = jobBuilder.Build();  // creates a JobInfo object.

Android 작업 Scheduler의 강력한 기능은 작업이 실행 되는 시기 또는 작업이 실행 될 수 있는 상황을 제어 하는 기능입니다.A powerful feature of the Android Job Scheduler is the ability to control when a job runs or under what conditions a job may run. 다음 표에서는 앱이 작업을 실행할 수 있는 시기에 영향을 줄 수 있도록 하는 JobInfo.Builder에 대 한 몇 가지 방법에 대해 설명 합니다.The following table describes some of the methods on JobInfo.Builder that allow an app to influence when a job can run:

메서드Method 설명Description
SetMinimumLatency 작업이 실행 되기 전에 관찰 해야 하는 지연 (밀리초)을 지정 합니다.Specifies that a delay (in milliseconds) that should be observed before a job is run.
SetOverridingDeadline 이 시간 (밀리초)이 경과 하기 전에 작업을 실행 해야 하는를 선언 합니다.Declares the that the job must run before this time (in milliseconds) has elapsed.
SetRequiredNetworkType 작업에 대 한 네트워크 요구 사항을 지정 합니다.Specifies the network requirements for a job.
SetRequiresBatteryNotLow 장치가 사용자에 게 "배터리 부족" 경고를 표시 하지 않는 경우에만 작업이 실행 될 수 있습니다.The job may only run when the device is not displaying a "low battery" warning to the user.
SetRequiresCharging 작업은 배터리가 충전 된 경우에만 실행 될 수 있습니다.The job may only run when the battery is charging.
SetDeviceIdle 장치가 사용 중일 때 작업이 실행 됩니다.The job will run when the device is busy.
SetPeriodic 작업이 정기적으로 실행 되도록 지정 합니다.Specifies that the job should be regularly run.
SetPersisted 작업은 장치 재부팅 간에 perisist 되어야 합니다.The job should perisist across device reboots.

SetBackoffCriteria는 작업을 다시 실행 하기 전에 JobScheduler 기다려야 하는 시간에 대 한 몇 가지 지침을 제공 합니다.The SetBackoffCriteria provides some guidance on how long the JobScheduler should wait before trying to run a job again. 백오프 조건에는 지연 시간 (밀리초의 기본값은 30 초)과 사용 해야 하는 백오프 유형 ( 백오프 정책이 나 _재시도 정책이_라고도 함)이 있습니다.There are two parts to the backoff criteria: a delay in milliseconds (default value of 30 seconds)and type of back off that should be used (sometimes referred to as the backoff policy or the retry policy). 두 정책은 Android.App.Job.BackoffPolicy 열거형에 캡슐화 됩니다.The two policies are encapsulated in the Android.App.Job.BackoffPolicy enum:

  • 지 수 백오프 정책을 – BackoffPolicy.Exponential 각 실패 후에 초기 백오프 값이 급격히 증가 합니다.BackoffPolicy.Exponential – An exponential backoff policy will increase the initial backoff value exponentially after each failure. 작업이 처음으로 실패 하면 라이브러리는 작업을 다시 예약 하기 전에 지정 된 초기 간격을 대기 합니다 (예: 30 초).The first time a job fails, the library will wait the initial interval that is specified before rescheduling the job – example 30 seconds. 작업이 실패 하는 두 번째 경우 라이브러리는 작업을 실행 하기 전에 최소 60 초 정도 기다립니다.The second time the job fails, the library will wait at least 60 seconds before trying to run the job. 세 번째 실패 후 라이브러리는 120 초 정도 대기 하 게 됩니다.After the third failed attempt, the library will wait 120 seconds, and so on. 이 설정은 기본값입니다.This is the default value.
  • BackoffPolicy.Linear –이 전략은 작업이 성공할 때까지 설정 된 간격으로 실행 되도록 다시 예약 해야 하는 선형 백오프.BackoffPolicy.Linear – This strategy is a linear backoff that the job should be rescheduled to run at set intervals (until it succeeds). 선형 백오프는 가능한 한 빨리 완료 되어야 하는 작업 또는 자신을 신속 하 게 해결 하는 문제에 가장 적합 합니다.Linear backoff is best suited for work that must be completed as soon as possible or for problems that will quickly resolve themselves.

JobInfo 개체 만들기에 대 한 자세한 내용은 JobInfo.Builder 클래스에 대 한 Google 설명서를 참조 하세요.For more details on create a JobInfo object, please read Google's documentation for the JobInfo.Builder class.

JobInfo를 통해 작업에 매개 변수 전달Passing parameters to a job via the JobInfo

매개 변수는 Job.Builder.SetExtras 메서드와 함께 전달 되는 PersistableBundle를 만들어 작업에 전달 됩니다.Parameters are passed to a job by creating a PersistableBundle that is passed along with the Job.Builder.SetExtras method:

var jobParameters = new PersistableBundle();
jobParameters.PutInt("LoopCount", 11);

var jobBuilder = this.CreateJobBuilderUsingJobId<DownloadJob>(1)
                     .SetExtras(jobParameters)
                     .Build();

PersistableBundleJobServiceOnStartJob 메서드에서 Android.App.Job.JobParameters.Extras 속성을 통해 액세스할 수 있습니다.The PersistableBundle is accessed from the Android.App.Job.JobParameters.Extras property in the OnStartJob method of a JobService:

public override bool OnStartJob(JobParameters jobParameters)
{
    var loopCount = jobParams.Extras.GetInt("LoopCount", 10);
    
    // rest of code omitted
} 

작업 예약Scheduling a job

작업을 예약 하기 위해 Xamarin.ios 응용 프로그램은 JobScheduler 시스템 서비스에 대 한 참조를 가져온 후 이전 단계에서 만든 JobInfo 개체를 사용 하 여 JobScheduler.Schedule 메서드를 호출 합니다.To schedule a job, a Xamarin.Android application will get a reference to the JobScheduler system service and call the JobScheduler.Schedule method with the JobInfo object that was created in the previous step. JobScheduler.Schedule는 두 정수 값 중 하나를 사용 하 여 즉시 반환 됩니다.JobScheduler.Schedule will immediately return with one of two integer values:

  • Jobscheduler. ResultSuccess – 작업이 성공적으로 예약 되었습니다.JobScheduler.ResultSuccess – The job has been successfully scheduled.
  • Jobscheduler. ResultFailure – 작업을 예약할 수 없습니다.JobScheduler.ResultFailure – The job could not be scheduled. 이 오류는 일반적으로 JobInfo 매개 변수가 충돌 하기 때문에 발생 합니다.This is typically caused by conflicting JobInfo parameters.

이 코드는 작업을 예약 하 고 예약 시도의 결과를 사용자에 게 알리는 예제입니다.This code is an example of scheduling a job and notifying the user of the results of the scheduling attempt:

var jobScheduler = (JobScheduler)GetSystemService(JobSchedulerService);
var scheduleResult = jobScheduler.Schedule(jobInfo);

if (JobScheduler.ResultSuccess == scheduleResult)
{
    var snackBar = Snackbar.Make(FindViewById(Android.Resource.Id.Content), Resource.String.jobscheduled_success, Snackbar.LengthShort);
    snackBar.Show();
}
else
{
    var snackBar = Snackbar.Make(FindViewById(Android.Resource.Id.Content), Resource.String.jobscheduled_failure, Snackbar.LengthShort);
    snackBar.Show();
}

작업 취소Cancelling a job

예약 된 모든 작업을 취소 하거나 JobsScheduler.CancelAll() 메서드나 JobScheduler.Cancel(jobId) 메서드를 사용 하 여 단일 작업만 취소할 수 있습니다.It is possible to cancel all the jobs that have been scheduled, or just a single job using the JobsScheduler.CancelAll() method or the JobScheduler.Cancel(jobId) method:

// Cancel all jobs
jobScheduler.CancelAll(); 

// to cancel a job with jobID = 1
jobScheduler.Cancel(1)

요약Summary

이 가이드에서는 Android 작업 스케줄러를 사용 하 여 백그라운드에서 작업을 지능적으로 수행 하는 방법에 대해 설명 했습니다.This guide discussed how to use the Android Job Scheduler to intelligently perform work in the background. JobService 수행할 작업을 캡슐화 하는 방법 및 JobScheduler를 사용 하 여 해당 작업을 예약 하 고, JobTrigger 조건을 지정 하 고 RetryStrategy를 사용 하 여 오류를 처리 하는 방법을 설명 했습니다.It discussed how to encapsulate the work to be performed as a JobService and how to use the JobScheduler to schedule that work, specifying the criteria with a JobTrigger and how failures should be handled with a RetryStrategy.