使用Evernote Android-Job库时,定期作业无法一致运行

时间:2017-11-18 23:20:54

标签: android android-jobscheduler android-job

我正在尝试使用evernote的android-job安排定期工作每隔15分钟运行一次。 工作运行2-3次,然后每15分钟不运行一次。基本上在8小时的时间内,当设备闲置时,它几乎运行了10-11次。有什么我做错了。我的工作唯一的要求是连接网络应该连接。

android-job库是否有点保证该作业会运行?这是我的工作代码

   public class TestNetworkJob extends Job {

    public static final String TAG = "TestNetworkJob";

    @NonNull
    @Override
    protected Result onRunJob(Params params) {
        Timber.i("onRunJob");

        RetrofitUtils.getInstance().postSlack("TestCall: " + DateTimeUtils.getLocalizedDateTimeString(System
                .currentTimeMillis()));
        return Result.SUCCESS;

    }

    public static JobRequest buildJobRequest() {
        return new JobRequest.Builder(TAG)
                .setUpdateCurrent(true)
                .setRequiredNetworkType(JobRequest.NetworkType.CONNECTED)
                .setPeriodic(TimeUnit.MINUTES.toMillis(15))
                .build();
    }
}

1 个答案:

答案 0 :(得分:1)

  

基本上,在8小时的时间内,当设备闲置时它几乎运行了10-11次

这听起来像是标准的打盹模式行为,您将在Android 6.0+设备上遇到这种行为。

  

我认为这是使用作业调度程序API的重点

哦,$DEITY,不。使用JobScheduler(或围绕它的包装)背后的观点是对电池友好。

  

那么我们怎样才能确保每15分钟就有一份工作?

一般情况下,你没有。

Google希望您停止投票并切换到Firebase Cloud Messaging,以获取服务器端推送消息。欢迎您在setAndAllowWhileIdle()上体验setExactAndAllowWhileIdle() / AlarmManager。但是,总的来说,背景处理战争意味着定期进行背景工作是最困难的。