应用关闭时,Firebase作业调度程序未执行

Zee*_*ro0 5 android firebase firebase-job-dispatcher

我通过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);
}
Run Code Online (Sandbox Code Playgroud)

制作.setRecurring(true)会触发它,但只有在你打开应用程序然后它重复并且即使应用程序关闭也能正常工作.

请帮忙!

小智 1

您使用哪个版本的 Android 进行测试?

Android Marshmallow 引入了新的省电功能。其中一项功能是 Doze,当设备长时间不使用时,它可以通过推迟应用程序的后台 CPU 和网络活动来减少电池消耗。第二个是应用程序待机,它推迟用户最近未与之交互的应用程序的后台网络活动。

请参阅:
https ://developer.android.com/training/monitoring-device-state/doze-standby.html

还应该注意的是,一些自定义 Android 版本(例如小米的 MIUI、华为的 EMUI)具有额外的权限,允许在后台运行应用程序或接收通知(例如来自 Firebase Cloud Messaging)。