【问题标题】:Firebase job dispatcher is not executing when app is closed关闭应用程序时,Firebase 作业调度程序未执行
【发布时间】: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) 触发它,但只有在您打开应用程序时才会触发它,然后即使应用程序关闭,它也会重复并正常工作。

请帮忙!

【问题讨论】:

    标签: android firebase firebase-job-dispatcher


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 那么如何用自定义Android来处理呢?
    猜你喜欢
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2017-06-18
    • 1970-01-01
    相关资源
    最近更新 更多