何时使用 JobIntentService 与 WorkManager?

When to use JobIntentService vs WorkManager?

Google 最近弃用了 IntentService 自:https://android.googlesource.com/platform/frameworks/base.git/+/6f8b09029932dfd24945202017639754b00acc2e

IntentService 的文档现在说:

 * @deprecated IntentService is subject to all the
 *   <a href="/preview/features/background.html">background execution limits</a>
 *   imposed with Android 8.0 (API level 26). Consider using {@link androidx.work.WorkManager}
 *   or {@link androidx.core.app.JobIntentService}, which uses jobs
 *   instead of services when running on Android 8.0 or higher.

那么JobIntentService和WorkManager有什么区别,在什么情况下推荐使用哪个呢?

Google 在这个页面上甚至没有提到 JobIntentService,他们只提到了 WorkManager:https://developer.android.com/guide/background

自从 Android Oreo 以来,我们不能再在后台保留正常的服务 运行,因为系统将:

1-如果应用程序本身在启动服务后进入后台,大约一分钟后终止服务

2-如果在应用程序本身处于后台时启动服务,则抛出异常

IntentService 只是普通服务的一个子类,它在后台线程上按顺序执行所有工作,并在完成所有工作后自行停止。但作为一项服务,它也受到上述限制的影响。

现在为 JobIntentService:

将在 Oreo 之前的设备上充当正常的 IntentService(因为我们没有任何限制),在 Oreo+ 上将使用 jobScheduler 来实现与 IntentService 类似的行为。 它只是尽快开始工作,通过以下方式安排工作 JobScheduler 和 JobScheduler 可能会选择 推迟 工作一段时间,但它的工作更有可能在低内存情况下、打瞌睡模式下或到达某个时间时发生变化或中断限制(~10 分钟)

使用 JobIntentService,做一些配置是 不可能的, 比如具体定义我们希望我们的工作在什么情况下开始(例如当设备当前正在充电或者我们是否有 WIFI 连接时),但是使用 workmanager 我们 可以 设置这些约束。

将 WorkManager 用于具有某些约束的作业,或用于jobs/work事务性未进行的作业,或用于作业这可能会在 将来的某个时间发生 ,并且当你想在 Android Oreo+ 上复制正常 IntentService 的行为时使用 JobIntentService 以及对于可能会稍微延迟并且可能需要超过1分钟但不到10分钟约

希望我回答了你的问题。

此致