由于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中看到的一个缺点是它不会立即启动。
发布于 2018-11-11 21:06:27
前台服务不会受到Doze的影响,但如果您需要在关闭屏幕的情况下继续执行任务,则仍然需要使用唤醒锁。
JobIntentService (使用JobScheduler)为您管理唤醒锁,但您无法控制作业何时启动。
我会将前台IntentService (或服务)用于高优先级任务(例如,下载数据库),这些任务应该立即运行,并且不应该被系统暂停/终止。
我会结合使用JobIntentService和AlarmManager来调度低优先级的任务,比如定期刷新小部件的数据。
发布于 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不工作。
https://stackoverflow.com/questions/53248528
复制相似问题