IntentService + startForeground与JobIntentService

时间:2018-11-11 12:02:22

标签: android android-service intentservice android-intentservice android-jobscheduler

由于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中看到的一个缺点是它不会立即开始。

2 个答案:

答案 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无法正常工作。