我一直在使用Job Scheduler API。对于棉花糖,它完美地运作。 但对于棒棒糖设备(5.1.1),它不会立即启动(需要随机的分钟数)。我的意思是onStartJob()方法需要一些时间来调用。
以下是我正安排工作的代码段。
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,它会在安排作业后立即调用。 请告诉这个问题的根本原因。
答案 0 :(得分:1)
聚会晚了一点,但是我在我的Oppo F1F和Android 5.1.1上发现了完全相同的问题-在以后测试过的手机上都可以。我也没有尝试过网络,但是即使使用以下命令也应立即进行,这不是强制性的:
JobInfo jobInfo = new JobInfo.Builder(++jobId, componentName)
.setMinimumLatency(1)
.setOverrideDeadline(1)
.build();
我在其他地方读到最小延迟为0会导致此问题,因此设置为1;如果未满足其他约束,则设置的替代截止期限1应该是最大超时。公平地说,我从未尝试过2。我的解决方案是仅使用Android 8中的作业;我发现那时已经消除了一些虫子!你有没有解决的办法?