我正在创建一个需要向API发送请求的应用程序。此请求必须每2分钟发送一次。为此,我正在使用Firebase Job Dispatcher
问题是第一个请求是在时间发送的,但是下一个请求的发送时间更长:例如。
你可以想象,一天之后,延迟将是30分钟甚至更长......
这是我用来创建作业的代码(在主要活动中 - onCreate)
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的Android机箱(但我的应用程序也必须在4.3设备上运行,因为我使用的是firebase而不是JobScheduler)和Google Play服务11.5.09(434)。
你有什么想法为什么这样做?如果有办法解决这个问题?如果没有,是否还有另外一种方法每2分钟做一次工作?
答案 0 :(得分:1)
你没有做错任何事。这是一种设计的预期行为。 FirebaseJobDispatcher使用Google Play服务中的计划引擎,该引擎可能会在Android 5.0及更高版本的引擎盖下使用JobScheduler。 JobScheduler将来自不同应用程序的任务批处理为一批,不会经常唤醒设备并节省电池电量。因此,无法确保您的任务每2分钟执行一次。如果您需要此精度,请考虑使用不建议进行任何网络呼叫的AlarmManager,因为它会影响电池寿命。
为什么你甚至需要经常发送请求?考虑更多地考虑你正在做的事情。保存您在数据库或磁盘上发送到后端的数据可能更好。然后你可以每隔30-60分钟分批发送它或者适合你的任何东西。您还可以使用Firebase Cloud Messaging向设备发送消息,要求其在需要时将数据发送到后端。