我已经通过firebase作业调度程序设置了一个作业,它应该在X-hours之后执行。当应用程序处于打开状态或后台时它可以正常工作但在关闭应用程序时无法正常工作。
太多人都遇到过这个问题,即使这些问题仍然在Github中开放,但我没有找到解决方案。
这是我的代码:
public void setupJob(){
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));
final int periodicity = (int) TimeUnit.HOURS.toSeconds(3);
final int toleranceInterval = 30;
Job myJob = dispatcher.newJobBuilder()
.setService(MyScheduler.class)
.setTag("MY_JOB_TAG")
.setRecurring(false)
.setLifetime(Lifetime.FOREVER)
.setTrigger(Trigger.executionWindow(periodicity, periodicity + toleranceInterval))
.setReplaceCurrent(false)
.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
.build();
dispatcher.mustSchedule(myJob);
}
使.setRecurring(true)触发它,但只有在你打开应用程序然后它重复并且即使应用程序关闭也能正常工作。
请帮忙!
答案 0 :(得分:1)
您使用哪个版本的Android进行测试?
Android Marshmallow推出了新的省电功能。这些功能之一是Doze,当设备长时间不使用时,通过推迟应用程序的后台CPU和网络活动来减少电池消耗。第二个是App Standby,它推迟了用户最近没有与之交互过的应用程序的后台网络活动。
请参阅:
https://developer.android.com/training/monitoring-device-state/doze-standby.html
还应该注意的是,一些自定义Android版本(例如来自Xiaomi的MIUI,来自华为的EMUI)具有允许在后台运行应用程序或接收通知的额外权限(例如来自Firebase云消息传递)。