火箱求职者



我正在创建一个需要向API发送请求的应用程序。此请求必须每2分钟发送一次。为此,我正在使用Firebase Job Dispatcher

问题是第一个请求是在时间发送的,但是下一个请求会以更大的延迟发送:例如。

  • 第一个请求:2分钟后发送
  • 第二个请求:2.3分钟后发送(而不是两个)
  • 第三请求:3.5分钟后发送(而不是两个)
  • 第四请求:5分钟后发送(而不是两个)

您可以想象,一天后,延迟将为30分钟甚至更长时间...

这是我用来创建作业的代码(在主要活动中 - ongreate)

        Job pingJob = mDispatcher.newJobBuilder()
            .setService(PingJob.class) // the job class to execute
            .setTag(PingJob.TAG) //tag - name of the job
            .setRecurring(true) // repeat
            .setTrigger(Trigger.executionWindow(60, 60*2))
            .setReplaceCurrent(false)
            .build();
    mDispatcher.mustSchedule(pingJob);

这是pingjob类(确保问题不是我在onstartjob中所做的,我只放日志):

public class PingJob extends Job {
    public static final String TAG = "ping_job";
    @Override
    public boolean onStartJob(final JobParameters params) {
        Log.d("ping job", "just put a log to see when is executed");
        jobFinished(params, true);
        return true;
    }
    @Override
    public boolean onStopJob(JobParameters params) {
        return false;
    }
}

我使用的是Android 6.0.1的Android盒(但是我的应用程序也必须在4.3设备上运行,为什么我使用Firebase而不是JobsCheduler)和Google Play Services 11.5.09(434)。p>您有什么想法为什么要这样做?如果有办法解决这个问题吗?如果没有,是否有另一种方法每2分钟工作?

您没有做错任何事情。这是一种设计的预期行为。FirebaseJobdisPatcher在Google Play服务中使用了调度引擎,该引擎很可能在Android 5.0及更高范围内使用Hood下方的JobsCheduler。JobsCheduler将任务从不同的应用程序批量分为一批,以免经常唤醒设备并节省电池。因此,无法保证您的任务将每2分钟完全执行一次。如果您需要此精确度,请考虑使用AlarmManager,而不建议这样做任何网络调用,因为它会影响电池寿命。

为什么您甚至需要经常发送请求?考虑更多地考虑您的工作。最好保存要在数据库或磁盘上发送到后端的数据。然后,您可以每30-60分钟分批发送一次或对您有用的任何东西。您还可以使用Firebase Cloud Messaging将消息发送到设备,以要求其在需要时将数据发送到后端。

相关内容

  • 没有找到相关文章

最新更新