首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IntentService + startForeground与JobIntentService

IntentService + startForeground与JobIntentService
EN

Stack Overflow用户
提问于 2018-11-11 20:02:22
回答 2查看 5.9K关注 0票数 12

由于Android Oreo后台执行受限,文档建议将IntentService重构为JobIntentService

https://developer.android.com/about/versions/oreo/background

JobIntentService在Oreo下立即作为IntentService运行,但在Oreo+上调度作业

https://developer.android.com/reference/android/support/v4/app/JobIntentService

在什么情况下,将普通IntentService作为具有持久通知的前台Service运行是有意义的,什么情况下JobIntentService更好?

我在JobIntentService中看到的一个缺点是它不会立即启动。

EN

回答 2

Stack Overflow用户

发布于 2018-11-11 21:06:27

前台服务不会受到Doze的影响,但如果您需要在关闭屏幕的情况下继续执行任务,则仍然需要使用唤醒锁。

JobIntentService (使用JobScheduler)为您管理唤醒锁,但您无法控制作业何时启动。

我会将前台IntentService (或服务)用于高优先级任务(例如,下载数据库),这些任务应该立即运行,并且不应该被系统暂停/终止。

我会结合使用JobIntentService和AlarmManager来调度低优先级的任务,比如定期刷新小部件的数据。

票数 10
EN

Stack Overflow用户

发布于 2019-02-01 18:44:08

如果你想做一些长时间运行的操作,比如音乐播放器,使用带通知的前台服务。因为和JobScheduler一样,JobIntentService也有执行时间限制。( 10分钟)

如果您认为用户不需要知道您工作情况,那么您可以使用JobIntentService而无需通知。

你不需要担心打瞌睡模式,如果用户是积极使用你的应用程序。

根据https://www.bignerdranch.com/blog/diving-into-doze-mode-for-developers/的说法,有一些休眠模式的情况

在两个屏幕都关闭且设备不充电后不久,

轻睡眠开始生效,在应用限制之前只需等待几分钟,以确保用户已停止使用手机

例如,当你在计算时,用户关闭了屏幕。您的任务已完成,您想要运行后台服务。在这种情况下,您的JobIntentService可以推迟,因为设备可能处于打瞌睡模式。

但是,如果您希望立即执行后台操作,请使用带有WakeLock ForegrounService,因为当屏幕关闭时,ForegroundService不工作。

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

https://stackoverflow.com/questions/53248528

复制
相关文章

相似问题

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