2017-11-07 19 views
2

안드로이드 폰에서 서버 애플리케이션으로 주기적으로 내 위치 값을 보내려고하고 1 분으로 시간을 설정했습니다. 내가 서비스를 시작했을 때 jobservice는 잘 작동하지만 몇 분 후에 전화를 잠금 해제 할 때 Jobservice는 1 초 내에 두 개의 데이터를 보냅니다. 내 코드에서 뭔가 잘못잠금 해제시 작업 스케줄러가 1 초에 2 회 실행

MainActivity.java

JobScheduler jobScheduler= 
(JobScheduler)getSystemService(Context.JOB_SCHEDULER_SERVICE); 

ComponentName jobService = new ComponentName(getPackageName(), 
ServiceClass.class.getName()); 
    JobInfo.Builder jobInfo = new JobInfo.Builder(MY_JOB, jobService); 
    PersistableBundle bundle = new PersistableBundle(); 
    jobInfo.setPeriodic(period*60*1000); 
int jobId = jobScheduler.schedule(jobInfo.build()); 
    if(jobId>0){ 
     Toast.makeText(MainActivity.this,"Successfully scheduled job 
    ",Toast.LENGTH_SHORT).show(); 
     btstartservice.setEnabled(false); 
     btstopservice.setEnabled(true); 
    }else{ 
     Toast.makeText(MainActivity.this,"Faild to start service 
    ",Toast.LENGTH_SHORT).show(); 
    } 

ServiceClass.java

public class ServiceClass extends JobService implements LocationListener{ 
     public boolean onStartJob(JobParameters params) { 
     getLocation(); 
     return false; 
     } 

     @Override 
     public boolean onStopJob(JobParameters params) { 
      Toast.makeText(getApplicationContext(),"Service 
      Stopped",Toast.LENGTH_SHORT).show(); 
      return false; 
    } 
} 

답변

1

당신이 JobInfo 코드를 보면, MIN_PERIOD_MILLIS 15 분으로 설정되어 있습니다. 이 기간보다 낮게 설정된 경우 실제로 15 분이 사용됩니다.

도 코드에서이 comment를 참조하십시오

쿼리 정기적으로 예약 된 작업에 허용되는 최소 간격을. 작업을 예약 할 때 더 작은 기간을 선언하면 여전히주기적인 작업이 발생하지만이 기간은 유효 기간으로 실행됩니다.

간격을두고 반복되는 작업에는 다른 서비스가 필요할 수 있으므로 알람 관리자가 작동합니다.

+0

먼저 Alarm Manager를 시도했지만 성능이 좋지 않습니다. 나는 또한 Alarm Manager와 JobScheduler의 차이점에 대해서 읽었으며 [JobScheduler] (https://www.bignerdranch.com/blog/choosing-the-right-background-scheduler-in-android/)는 정기적 인 작업에 효율적이라고 생각한다. . –

+0

정기적 인 작업에 15 분 미만의 간격이 필요하지 않으면 JobScheduler에 많은 이점이 있습니다. Alarm Manager에서 볼 수있는 문제에 대해 궁금 할 지 모르지만 다른 스레드가 더 적절할 것입니다. –

+0

작업 간격이 <15 분 인 경우이 스레드도 참조하십시오. https://stackoverflow.com/questions/39641278/job-scheduler-in-android-n-with-less-then-15-minutes-interval –