5

我已经通过 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) 会触发它,但只有在您打开应用程序时才会触发它,然后即使应用程序关闭,它也会重复并正常工作。

请帮忙!

4

1 回答 1

1

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

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

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

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

于 2017-06-11T21:30:25.883 回答