【问题标题】:Periodic Job not running consistently when using Evernote Android-Job library使用 Evernote Android-Job 库时,定期作业无法持续运行
【发布时间】:2017-11-18 23:20:54
【问题描述】:

我正在尝试使用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();
    }
}

【问题讨论】:

  • 这听起来像是典型的打盹模式行为。 Evernote 的图书馆并没有抵消这一点。
  • 那么我们如何确保每 15 分钟运行一次作业?我认为这就是使用作业调度器 API 的全部意义所在。 @CommonsWare

标签: android android-jobscheduler android-job


【解决方案1】:

基本上在 8 小时内,当设备处于空闲状态时,它几乎运行了 10-11 次

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

我认为这就是使用作业调度程序 API 的全部意义

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

那么我们如何确保每 15 分钟运行一次作业?

一般来说,你不会。

Google 希望您停止轮询并切换到 Firebase Cloud Messaging 以获取服务器端推送消息。欢迎您在AlarmManager 上试用setAndAllowWhileIdle()/setExactAndAllowWhileIdle()。但是,总的来说,后台处理之战意味着做周期性后台工作充其量是困难的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多