2017-10-01 15 views
0

구현하려는 것은 매 시간 서버에서 데이터를 가져 오는 백그라운드 서비스입니다. 이 서비스는 부팅 후 주기적으로 실행될 수 있습니다. 따라서 JobScheduler를 사용하여이 기능을 구현하도록 선택했습니다.JobScheduler.schedule() 호출시기

val jobScheduler = getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler val builder = JobInfo.Builder(1, ComponentName(this, PullDataJob::class.java)) .setPeriodic(1000L * 60 * 60) // one hour .setRequiredNetworkType(NETWORK_TYPE_ANY) .setPersisted(true) jobScheduler.schedule(builder.build())

onCreate() 내부에 배치되는 내 현재 코드입니다. 그러나 을 onCreate()에 넣으면 응용 프로그램을 열 때마다 서비스가 자동으로 실행됩니다.

시스템 부팅 후 사용자가 응용 프로그램을 열지 않아도 서비스가 주기적으로 실행되도록 위의 코드를 삽입하는 가장 좋은 장소는 어디입니까?

답변

1

작업은 주기적으로 (매시간) 실행되므로 처음 실행하면 JobScheduler.schedule()이 아니어야합니다.이 다시 호출되어야합니다.

처음으로 JobScheduler.schedule()으로 전화하면 일정이 잡혔다는 사실을 등록하고 이전에 결코 작업을 실행하지 않았다고 확신 할 때만 예약 방법을 실행하십시오.

public static final String IS_JOB_FIRST_RUN = "job scheduled"; 

... 

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
    if (preferences.getBoolean(IS_JOB_FIRST_RUN, true)) { 

     // your code 
     JobScheduler.schedule(); 
     preferences.edit().putBoolean(IS_JOB_FIRST_RUN, false).apply(); 
    }