代码之家  ›  专栏  ›  技术社区  ›  Chud37

Android N中的定期作业(牛轧糖,7.0)

  •  1
  • Chud37  · 技术社区  · 6 年前

    好吧,原来我的作业调度程序是这样的:

    JobScheduler scheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
    if(scheduler.getPendingJob(JOB_NUMBER) == null) {
        ComponentName componentName = new ComponentName(this, MyJobService.class);
        JobInfo info = new JobInfo.Builder(JOB_NUMBER, componentName)
                .setRequiresCharging(false)
                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
                .setPersisted(true)
                .setPeriodic(60 * 60 * 1000L, 5 * 60 *1000)
                .build();
        int resultCode = scheduler.schedule(info);
        if (resultCode == JobScheduler.RESULT_SUCCESS) {
            Log.d(TAG, "Service is not running, Job " + String.valueOf(JOB_NUMBER) + " Scheduled.");
        } else {
            Log.d(TAG, "Service is not running, However job scheduling failed.");
        }
    } else{
        Log.d(TAG, "Service is already scheduled.");
    }
    

    setPeriodic() 包括以下内容:

    .setMinimumLatency(1 * 1000)
    .setOverrideDeadline(3 * 1000)
    

    这样,服务就可以运行了。但是,这不是周期性的,它只运行一次。我找不到允许我在Android Nougat中运行定期作业的文档/教程/示例。有人能帮我吗?

    关于这个完全相同的主题还有其他问题:

    Job Scheduler not running on Android N

    Job Scheduler Not recurring in periodic in Android 7.0 (Nougat)

    然而,他们都没有明确的答案。

    最后一分钟注意:好吧,似乎传递FlexMillis到 设置周期()

    .setPeriodic(15 * 60 * 1000, 5 * 60 *1000)

    setPeriodic 它在预定工作10分钟后就开火了。但是,与Oreo不同的是,作业在第一次计划时不会运行。在奥利奥,一旦我建立了作业,作业就运行了。同样,我在文档中找不到提到过这个。

    1 回复  |  直到 6 年前
        1
  •  1
  •   TT_W    6 年前

    你应该使用 https://developer.android.com/topic/libraries/architecture/workmanager/ . 这是一个新的Android工具,它根据情况使用JobScheduler/AlarmManager等等。