【发布时间】:2016-12-16 11:43:49
【问题描述】:
我一直在使用 Job Scheduler API。对于棉花糖来说,它非常有效。 但是对于 Lollipop Device(5.1.1),它不会立即启动(需要随机数分钟)。我的意思是 onStartJob() 方法需要一些时间来调用。
以下是我用来安排我的工作的代码 sn-p。
private void scheduleJob() {
ComponentName serviceName = new ComponentName(this, SampleJobService.class);
JobInfo jobInfo = new JobInfo.Builder(1000, serviceName)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE)
.setRequiresCharging(false)
.setPeriodic(60 * 1000)
.build();
JobScheduler scheduler = (JobScheduler) this.getSystemService(Context.JOB_SCHEDULER_SERVICE);
int result = scheduler.schedule(jobInfo);
if (result == JobScheduler.RESULT_SUCCESS) {
Log.e("khushank", "Job scheduled successfully!");
Toast.makeText(this, "Job scheduled successfully!", Toast.LENGTH_LONG).show();
} else {
Log.e("khushank", "not able to start result: " + result);
}
}
以下是我的简单作业服务,它只写日志
public class SampleJobService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
Log.e("khushank","job started with id = "+params.getJobId());
return false;
}
@Override
public boolean onStopJob(JobParameters params) {
Log.e("khushank","job Stopped with id = "+params.getJobId());
return false;
}
}
当我运行这个示例应用程序时,日志打印如下:
12-16 16:28:17.040 27119-27119/com.example.inkkashy02.myapplication E/khushank: Job scheduled successfully!
12-16 16:29:17.032 27119-27119/com.example.inkkashy02.myapplication E/khushank: job started with id = 1000
无法调试为什么在 Lollipop 中调用 onStartJob() 需要将近一分钟。 对于 Marshmallow,一旦安排了作业,它就会被调用。 请说出这个问题的根本原因。
【问题讨论】:
-
AFAIK,
JobSchedulerAPI 和文档中没有任何内容说第一份工作将立即发生。是什么让你觉得有问题? -
@CommonsWare 由于我将 setRequiredNetworkType 保持为 NETWORK_TYPE_NONE 它应该在我安排它后立即启动作业。在我的情况下,作业调度程序返回 RESULT_SUCCESS 但 onStatJob() 不会立即调用,它需要随机数分钟。
-
@CommonsWare 由于我将 setRequiredNetworkType 保持为 NETWORK_TYPE_NONE 它应该在我安排它后立即启动作业。在我的情况下,作业调度程序返回 RESULT_SUCCESS 但 onStatJob() 不会立即调用,它需要随机数分钟。因此,根据您的说法,作业应该在 Job Scheduler 返回 RESULT_SUCCESS 时开始,为什么同一个 Job Scheduler 会立即在 Marshmallow 中运行。
-
“因为我将 setRequiredNetworkType 保持为 NETWORK_TYPE_NONE,所以我应该在安排它后立即启动作业”——请提供描述此行为的文档的链接,因为我没有看到这个记录在任何地方。 “为什么同一个 Job Scheduler 会立即在 Marshmallow 中运行”——AFAIK,它没有确切记录何时开始。对于
setPeriodic(),我希望它首先发生在那个时期的某个地方。但是,您的一分钟时间可能太短了。
标签: android android-6.0-marshmallow android-5.1.1-lollipop android-jobscheduler