在 Android API <21 中使用 Job Scheduler

Using Job Scheduler in Android API <21

我正在看 Vogella 的调度教程。它提到了在 Android 的 API 21 中引入的 Job Scheduler API。我的问题是它可以在 API 低于 21 (Lollipop) 但不低于 Android 版本 3 (Honeycomb) 中实现吗?

你可以看看JobSchedulerCompat library.

但是,正如作者所指出的,JobScheduler 只能从 Lollipop 及以后的版本使用是有原因的,因此请注意这一点。引用:

However, this library has not been well-tested, so I would advise not using in production at this time. There are no guarantees that this will not run down your battery or cause your device to explode.

运行"jobs"pre-lollipop有几种做法

如前所述,您可以使用 JobSchedulerCompat 库,但是这个库与默认的 Lollipop API:

相比有很大的不同

On Lollipop 作业是一次性为所有应用程序批处理和安排的。但是,该库无法访问其他应用程序数据,因此无法使用该库合并来自两个不同应用程序的作业。

您可能想尝试的另一个选项是 AlarmManager API。此 API 可用于安排作业,但一个区别是 AlarmManager 除了 运行 作业的时间限制外没有其他约束。

自 KitKat 以来,AlarmManager API 也会在未使用 "exact" 方法安排时批处理作业。在 KitKat 作业未被批处理之前。

如果您的目标是同步数据,那么同步适配器 API 可能会有用:Sync-Adapter

参考文献:AlarmManager, JobSchedulerCompat

从现在开始(I/O 2015 年之后),您也可以使用新的 GcmNetworkManager。这里描述了如何使用它以及它是如何工作的 - https://developers.google.com/cloud-messaging/network-manager

它做了很多很酷的事情,比如它通过重新启动来保留你的任务。在 Lolipop 上它使用 JobScheduler,在 pre-Lolipop 上它使用它自己的实现。

编辑:

有关如何使用它的示例代码:https://github.com/jacktech24/gcmnetworkmanager-android-example

Evernote 有一个非常好的和强大的job scheduler library。它在每个 SDK 级别上使用最佳方法,并为您提供一个非常干净优雅的界面来安排和 运行 作业。

参考 this link 关于 Android N 预览 API 概述。

GCMNetworkManager, part of Google Play Services, which offers similar job scheduling with compatibility across legacy versions of Android.

棒棒糖前设备的推荐方法是使用 https://github.com/firebase/firebase-jobdispatcher-android#user-content-firebase-jobdispatcher-

阅读更多关于https://developer.android.com/topic/performance/scheduling.html#fjd

Firebase JobDispatcher is an open-source library that provides an API similar to JobScheduler in the Android platform. Firebase JobDispatcher serves as a JobScheduler-compatibility layer for apps targeting versions of Android lower than 5.0 (API level 21).

Firebase JobDispatcher supports the use of Google Play services as an implementation for dispatching (running) jobs, but the library also allows you to define and use other implementations: For example, you might decide to use JobScheduler or write your own, custom code. Because of this versatility, we recommend that you use this Firebase JobDispatcher if your app targets a version of Android lower than 5.0 (API level 21).

For more information about Firebase JobDispatcher, refer to its documentation and source code.

根据最新的后台作业调度APIs,你应该使用WorkManager。

WorkManager 允许您安排需要保证完成的后台任务(无论应用进程是否存在)。 WorkManager 为 API 14+ 设备 提供类似 JobScheduler 的 功能,甚至那些 没有 Google Play Services 的设备。

WorkManager 可查询(可观察),对工作图有强大的支持,并且流畅 API。

如果您正在使用 JobScheduler、FireBaseJobScheduler、and/or AlarmManager 和 BroadcastReceivers,您应该考虑改用 WorkManager。要了解更多信息,请参阅 Work Manager