由于Android Oreo后台执行限制,因此文档建议将IntentService
重构为JobIntentService
。
https://developer.android.com/about/versions/oreo/background
JobIntentService
立即作为IntentService
在奥利奥(Oreo)下面运行,但在奥利奥(Oreo)+上安排作业
https://developer.android.com/reference/android/support/v4/app/JobIntentService
在什么情况下,将正常的IntentService
作为具有持久性通知的前景Service
有意义,何时JobIntentService
更好?
我在JobIntentService
中看到的一个缺点是它不会立即开始。
答案 0 :(得分:1)
前景服务不受Doze的影响,但是如果需要在屏幕关闭时继续执行任务,则仍然必须使用唤醒锁。
JobIntentService(使用JobScheduler)为您管理唤醒锁,但是您对何时开始作业的控制较少。
我将前台IntentService(或Service)用于应立即运行且不应被系统暂停/杀死的高优先级任务(例如下载数据库)。
我将JobIntentService与AlarmManager结合使用来安排低优先级任务,例如定期刷新窗口小部件的数据。
答案 1 :(得分:0)
如果您想长时间运行,请使用诸如Music Player之类的功能,并使用Foreground Service和通知。因为JobIntentService具有与JobScheduler类似的时间执行限制。 (10分钟)
如果您认为用户不需要了解您的工作,则可以在没有通知的情况下使用JobIntentService。
如果用户正在积极使用您的应用,则无需担心打ze模式。
有一些情况下用于打盹模式,根据https://www.bignerdranch.com/blog/diving-into-doze-mode-for-developers/
光打盹开始踢在不久后两者屏幕关闭和 设备未充电,仅等待几分钟 应用限制只是为了确保用户已停止使用 他们的电话
例如,用户打开屏幕关闭,而你正在计算的东西。您的任务已完成,您想运行后台服务。在这种情况下,您的JobIntentService可能会延迟,因为设备可以处于打ze模式。
但是,如果要立即执行后台操作,请使用带有WakeLock的ForegrounService,因为在屏幕关闭时ForegroundService无法正常工作。