【问题标题】:evernote/android-job - how to schedule and run periodicallyevernote/android-job - 如何定期安排和运行
【发布时间】:2018-03-16 19:35:31
【问题描述】:

我已经从evernote-android-job 尝试了以下所有方法。似乎 schedulePeriodicJob 方法在某个时间间隔内运行,而 scheduleAdvancedJob 方法只运行一次。

通过一些示例帮助我如何设置 setExecutionWindow、setExact 和 setPeriodic 的值?

private void scheduleAdvancedJob() {
    PersistableBundleCompat extras = new PersistableBundleCompat();
    extras.putString("key", "Hello world");

    int jobId = new JobRequest.Builder(DemoSyncJob.TAG)
            .setExecutionWindow(30_000L, 40_000L)
            .setBackoffCriteria(5_000L, JobRequest.BackoffPolicy.EXPONENTIAL)
            .setRequiresCharging(true)
            .setRequiresDeviceIdle(false)
            .setRequiredNetworkType(JobRequest.NetworkType.CONNECTED)
            .setExtras(extras)
            .setRequirementsEnforced(true)
            .setUpdateCurrent(true)
            .build()
            .schedule();
}

private void schedulePeriodicJob() {
    int jobId = new JobRequest.Builder(DemoSyncJob.TAG)
            .setPeriodic(TimeUnit.MINUTES.toMillis(15), TimeUnit.MINUTES.toMillis(5))
            .build()
            .schedule();
}

private void scheduleExactJob() {
    int jobId = new JobRequest.Builder(DemoSyncJob.TAG)
            .setExact(20_000L)
            .build()
            .schedule();
}

【问题讨论】:

    标签: android android-jobscheduler firebase-job-dispatcher android-job


    【解决方案1】:

    我遇到过相同的方案并使用了这个方案并获得了成功。你也可以试试。

    public class RunFSJob extends Job {
    
        public static final String TAG = "JOB_FOR_START_SIGNARSERVICE";
    
        @Override
        @NonNull
        protected Result onRunJob(@NonNull Params params) {
    
            try {
    
                deleteCache(getContext().getApplicationContext());
    
                getContext().getApplicationContext().startService(new Intent(getContext().getApplicationContext(), SignalRService.class));
    
                Log.v("schedulePeriodicJob(15)", "JOB Done");
    
                cancel();
    
                Log.v("schedulePeriodicJob(15)", "JOB cancled");
    
                schedulePeriodicJob();
    
                Log.v("schedulePeriodicJob(15)", "JOB scheduled again from RunFSJob");
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            return Job.Result.SUCCESS;
        }
    }
    
    • 首先使用周期性作业,每次都从 onRunJob() 方法调度相同的作业。你也必须取消上一份工作。

    • 希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多