首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候使用JobIntentService和WorkManager?

什么时候使用JobIntentService和WorkManager?
EN

Stack Overflow用户
提问于 2020-01-13 23:16:54
回答 1查看 9.5K关注 0票数 26

谷歌最近不再推荐IntentService,因为:https://android.googlesource.com/platform/frameworks/base.git/+/6f8b09029932dfd24945202017639754b00acc2e

IntentService的文档现在说:

代码语言:javascript
复制
 * @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之间有什么区别,在什么情况下推荐哪一种呢?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-14 02:51:38

由于Android Oreo不能再在后台运行正常服务,因为系统会:

1-如果应用程序在启动服务后进入后台,则在大约一分钟后关闭该服务。

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

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

现在是JobIntentService:

将作为一个正常的IntentService在前奥利奥设备(因为我们没有任何限制)和Oreo+将使用jobScheduler来实现类似的行为与IntentService。它只是尽快开始工作,通过JobScheduler安排它的工作,JobScheduler可能会选择将工作推迟一段时间,但是它的工作更有可能在低记忆状态下,在打瞌睡模式下或者当它们达到一个时间限制(~10分钟)时被不同或中断。

使用JobIntentService,做一些配置是不可能的,比如明确地定义在什么情况下我们希望我们的作业启动(比如设备当前充电或者如果我们有WIFI连接),但是使用工作管理器,可以设置这些约束。

将WorkManager用于具有某些约束的作业(),或用于事务性的作业/工作(而不是正在进行的),或用于将来可能发生的作业,当您想要复制Android Oreo+上的正常IntentService的行为时使用JobIntentService,以及可能需要超过1分钟但不到10分钟左右的作业。

希望我回答了你的问题。

问候

票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59725556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档