2
アンドロイド電話からサーバーアプリケーションに定期的に位置情報を送信しようとしていて、時間を1分に設定しています。私がサービスを開始したとき、ジョブサービスはうまくいきますが、私が電話機をロック解除しているときに数分後、Jobserviceは1秒以内に2つのデータを送信します。私のコードで何か問題電話機のロックを解除するとジョブスケジューラが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;
}
}
まずアラームマネージャを試しましたが、うまく動作しませんでした。私は、Alarm ManagerとJobSchedulerの違いについても読んでおり、[JobScheduler](https://www.bignerdranch.com/blog/choosing-the-right-background-scheduler-in-android/)は定期的なタスクに効率的だと思います。 –
あなたの定期的な仕事が15分未満の間隔を必要としない場合、JobSchedulerには多くの利点があります。私はあなたがAlarm Managerで見る問題について興味がありますが、別のスレッドがおそらくもっと適切かもしれません。 –
このスレッドも参照してください<15分未満のジョブ間隔:https://stackoverflow.com/questions/39641278/job-scheduler-in-android-n-with-less-then-15-minutes-interval –