1

我一直在使用 Job Scheduler API。对于棉花糖来说,它非常有效。但对于 Lollipop Device(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,一旦安排了作业,它就会被调用。请告诉这个问题的根本原因。

4

1 回答 1

1

聚会有点晚了,但我在我的 Oppo F1F 和 Android 5.1.1 上发现了完全相同的问题——在我测试过的后来的手机上还可以。我也尝试了 network none ,但即使使用以下应该强制即时性的方法也不是:

    JobInfo jobInfo = new JobInfo.Builder(++jobId, componentName)
            .setMinimumLatency(1)
            .setOverrideDeadline(1)
            .build();

我在别处读到 0 的最小延迟会导致此问题,因此设置为 1;如果未满足其他约束,则将覆盖期限设置为 1 应该是最大超时。公平地说,我从未尝试过 2。我的解决方案是只使用 Android 8 中的作业;我认为到那时我已经解决了错误!你有什么决议吗?

于 2018-06-27T07:27:22.687 回答