我可以使用Firebase JobDispatcher触发特定时间的任务 [英] Can i use Firebase JobDispatcher for triggering time specific tasks
问题描述
我正在开发一个应用程序,其中某些任务要在特定时间在后台完成。
I am developing an application where certain tasks as to be done in background at a specific time.
Android开发人员文档建议了各种方法。我知道AlarmManager可用于此目的。但是,我认为,在打6.0模式下在Android 6.0中使用AlarmManager会产生不正确的触发器。
Android developer docs suggests various methods. I know AlarmManager can be used for this purpose. But, I think, using AlarmManager in Android 6.0 in Doze mode will give improper triggers.
我从开发人员文档
因为我的应用程序支持Android 5.0以下的版本。我想到要使用FireBaseJobDispatcher。
As my application supports version below Android 5.0. I thought of using FireBaseJobDispatcher.
我可以使用FirebaseJobDispatcher在特定时间触发特定任务吗。
Can I use FirebaseJobDispatcher for trigger a specific task at a specific time.
例如:我想每小时从9AM到6PM一次更新数据库
For Example : I want to update the DB once every hour from 9AM to 6PM
推荐答案
可以,但是如果您的时间范围是不是那么严格,因为打Do模式,不能保证您的任务会在几个小时后开始工作。如果您要进行严格的调度,请使用AlarmManager.setAndAllowWhileIdle。
而且,据我所知FirebaseJobDispatcher尚未发布,并且还有一些未解决的问题。为此,您可以使用GCMNetworkManager(来自Google Play服务 com.google.android.gms:play-services-gcm
)。
您的FirebaseJobDispatcher代码可能如下所示:
You can, but if you time window is not so strict, there is no guarantee that your task start to work in a few hours later, because Doze mode. If you want really strict scheduling - use AlarmManager.setAndAllowWhileIdle.
And, as I know FirebaseJobDispatcher has not released yet, and there is a few unresolved issues. Before it releases, you can use GCMNetworkManager (from Google Play Services com.google.android.gms:play-services-gcm
) for this purpose.
Your code for FirebaseJobDispatcher may looks like this:
final FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));
if (isSyncEnabled) {
Job job = dispatcher.newJobBuilder()
.setService(SyncService.class)
.setTag(TAG)
.setConstraints(isSyncOnlyWiFi ? Constraint.ON_UNMETERED_NETWORK : Constraint.ON_ANY_NETWORK)
.setRecurring(true) // !!!
.setLifetime(Lifetime.FOREVER) //!!!
.setTrigger(Trigger.executionWindow(syncIntervalInSeconds, syncIntervalInSeconds + TIME_WINDOW_IN_SECONDS))
.setReplaceCurrent(true)
.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
.build();
final int result = dispatcher.schedule(job);
if (result != FirebaseJobDispatcher.SCHEDULE_RESULT_SUCCESS) {
// pre handle error
}
对于GcmNetworkManager:
For GcmNetworkManager:
PeriodicTask task = new PeriodicTask.Builder()
.setService(SyncManagerService.class)
.setTag(TASK_TAG_SYNC_SERVICE)
.setUpdateCurrent(true)
.setPersisted(true)
.setPeriod(period)
.setFlex(flexInSeconds < period ? flexInSeconds : period)
.setRequiredNetwork(wifiOnly ? PeriodicTask.NETWORK_STATE_UNMETERED : PeriodicTask.NETWORK_STATE_CONNECTED)
.build();
GcmNetworkManager.getInstance(context).schedule(task);
这篇关于我可以使用Firebase JobDispatcher触发特定时间的任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!