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

Posted

技术标签:

【中文标题】关闭应用程序时,Firebase 作业调度程序未执行【英文标题】:Firebase job dispatcher is not executing when app is closed 【发布时间】:2017-11-08 12:53:41 【问题描述】:

我已通过 firebase 作业调度程序设置了一个作业,该作业应在 X 小时后执行。当应用程序打开或在后台运行时,它可以正常工作,但在应用程序关闭时无法正常工作。

遇到这个问题的人太多了,即使这样的问题在 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) 触发它,但只有在您打开应用程序时才会触发它,然后即使应用程序关闭,它也会重复并正常工作。

请帮忙!

【问题讨论】:

【参考方案1】:

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

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

见:https://developer.android.com/training/monitoring-device-state/doze-standby.html

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

【讨论】:

那么如何用自定义Android来处理呢?

以上是关于关闭应用程序时,Firebase 作业调度程序未执行的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 作业调度员是不是需要互联网访问来安排作业?

如何取消firebase作业调度程序中的重复作业

firebase 作业调度程序在 android 中以打瞌睡模式工作。?

如何检查是不是在 Firebase 作业调度程序中安排了作业?

使用 firebase 作业调度程序安排重复作业

如何在 Firebase 作业调度程序中检测网络断开连接?