Job Scheduler无法立即在Android Lollipop(5.1.1)上启动

时间:2016-12-16 11:43:49

标签: android android-6.0-marshmallow android-5.1.1-lollipop android-jobscheduler

我一直在使用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,它会在安排作业后立即调用。 请告诉这个问题的根本原因。

1 个答案:

答案 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中的作业;我发现那时已经消除了一些虫子!你有没有解决的办法?