現在、JobSchedulerを使って、指定の時間にstartJob()を呼び出せています。
しかし、その後も継続して、24時間ごとにstartJob()を呼び出したく
builder.setPeriodic(10006060*24)をセットしているのですが、
3秒ごとくらいでonStart()が呼び出されてしまいます。
何か設定を間違えているのでしょうか?
java
1 2public class MainActivity extends AppCompatActivity { 3 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_main); 8 9 startJob(); 10 11 } 12 13 14 public void startJob(){ 15 16 Date nine_date =null; 17 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 18 try { 19 nine_date = sdf.parse("2020/08/15 12:32:00"); 20 } catch (ParseException e) { 21 e.printStackTrace(); 22 } 23 24 //9時から、今の時間を引いて、9時 までのmsを取得する 25 long nine_milles=nine_date.getTime() - System.currentTimeMillis(); 26 27 ComponentName componentName= new ComponentName(this, MyJobService.class); 28 29 JobScheduler scheduler = (JobScheduler) this.getSystemService(Context.JOB_SCHEDULER_SERVICE); 30 JobInfo.Builder builder = new JobInfo.Builder(1, componentName); 31 32 builder.setMinimumLatency(nine_milles); 33 34 scheduler.schedule(builder.build()); 35 36 } 37} 38
java
1 2public class MyJobService extends JobService { 3 4 JobParameters mParams; 5 6 7 public MyJobService(){ 8 9 } 10 11 12 13 @Override 14 public boolean onStartJob(JobParameters params) { 15 mParams = params; 16 17 System.out.println("おんスタート "); 18 19 startJob(); 20 21 return true; 22 } 23 24 25 @Override 26 public boolean onStopJob(JobParameters params) { 27 jobFinished(params, false); 28 return false; 29 } 30 31 32 public void startJob(){ 33 34 // Date nine_date =null; 35 // SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 36 // try { 37 // nine_date = sdf.parse("2020/08/14 12:14:00"); 38 // } catch (ParseException e) { 39 // e.printStackTrace(); 40 // } 41 42 //9時から、今の時間を引いて、9時 までのmsを取得する 43 //long nine_milles=nine_date.getTime() - System.currentTimeMillis(); 44 45 ComponentName componentName= new ComponentName(this, MyJobService.class); 46 47 JobScheduler scheduler = (JobScheduler) this.getSystemService(Context.JOB_SCHEDULER_SERVICE); 48 JobInfo.Builder builder = new JobInfo.Builder(1, componentName); 49 50 builder.setPeriodic(1000*60*60*24); //多分二十四時間後になる 51 52 scheduler.schedule(builder.build()); 53 } 54}
私なりの解決策としては、呼び出されたstartJob()のなかでThread.sleep()を呼び出すと言うことです。
しかし、setPeriodic()はそれの代わりをするものだと思っていたので、なぜsetPeriodic()で再実行までの感覚を指定できないのかがわかりません。
java
1public void startJob(JobParameters params) { 2 mParams = params; 3 new Thread(new Runnable() { 4 5 @Override 6 public void run() { 7 try { 8 Thread.sleep(15000); 9 } catch (InterruptedException e) { 10 e.printStackTrace(); 11 } 12 if (mParams != null) { 13 14 System.out.println("もういっちょ "); 15 16 jobFinished(mParams, true); 17 } 18 } 19 }).start(); 20 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。