2017-11-07 6 views
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; 
    } 
} 

答えて

1

あなたはJOBINFOコードを見れば、MIN_PERIOD_MILLISを15分に設定されているがあります。この期間より下に設定されているものは、実際には15分かかります。

もコードでこのcommentを参照してください:

クエリ定期的にスケジュールされたジョブのために許可される最小間隔。 ジョブのスケジューリング時にこれより小さい期間を宣言しようとすると、依然として周期的なジョブが実行されますが、有効期間は で実行されます。

間隔をおいて定期的にタスクを実行するには、他のサービスが必要です。アラームマネージャが動作する可能性があります。

+0

まずアラームマネージャを試しましたが、うまく動作しませんでした。私は、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 –

関連する問題