android - JobService 只运行一次就可以立即运行吗?

标签 android android-jobscheduler

JobService只运行一次就可以立即运行吗?

我目前正在测试 JobService, 我使用以下代码

            JobScheduler jobScheduler = getSystemService(JobScheduler.class);
            jobScheduler.schedule(new JobInfo.Builder(1,
                    new ComponentName(getApplicationContext(), SyncJobLollipop.class))
                    .setMinimumLatency(1)
                    .setOverrideDeadline(1)
                    .build());

但它立即运行,这是因为我没有使用定期吗? 还是可以直接运行? 我想用这个代替 Thread。

我可以在完成后再次运行它吗?

最佳答案

Can JobService run immediately when it runs only once?

当您使用 JobScheduler API 时,它向您保证它将在条件完成时运行您的 JobService,但不一定立即运行。尽管如果您的应用程序在前台(用户正在使用它),它会更快地运行您的 JobService。我看到用户从未使用过的应用程序在运行作业时有很大的延迟(该作业只会执行一次)。

But it runs immediately, is this because I don't use periodically? Or it can run directly?

当作业被安排为周期性时,它的默认最短运行时间为 15 分钟(它不会将作业安排为周期性少于 15 分钟),而普通作业没有此限制。但这并不意味着作业会在满足条件后立即执行,正如我之前解释的那样。

And can I run it again just after it is finished?

您可以在完成后再次重新安排 JobService。我已经实现了它并且效果很好。但是,如果您大量调度此 JobService,系统将延迟您的作业的执行。

周期性作业不需要重新安排,因为在预定时间后作业将再次执行。

按照我的草稿解决方案:

class MyJobService extends JobService {
    public boolean onStartJob(JobParameters params)
        /* Here is run my task */
        scheduleJob(); // 
        return false;
    }

    public static void scheduleJob() {
        /* code to schedule this job service. */
    }
}

关于android - JobService 只运行一次就可以立即运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54878033/

相关文章:

java - Android:如何使用谷歌语音启动调用 Intent ?

android - Oreo 中的基于时间的通知

android错误找不到类JobSchedular

android - 如果我需要使用 jobInfo 执行重复任务,我该如何设置 jobFinished()?

java - 如何使用 JobScheduler 显示 toast 消息

java - 作业调度程序的作业调度不一致

android - 如何延迟从 RecyclerView 中删除项目

java - MVC 模型适合基本的纸牌游戏吗?

Android - Gallery 中的 ListView 使滚动不流畅

android - Android Studio 中的 Espresso 测试