前台服务和JobScheduler之间的区别

时间:2020-01-28 11:33:02

标签: android

我有一个应用程序,在其中我使用前台服务来启动N个线程,这些线程大多数时候都处于休眠状态,有时会醒来进行一些测量。

我使用了前台服务,因为我需要这些测量必须在特定且确切的时间完成,而不受Android 8.0引入的背景限制。

这似乎可行,并且从文档看来似乎没有问题,但我还阅读了JobScheduler。

使用乔布斯在特定的准确时间安排工作是有优势的,否则我的解决方案可以毫无问题地使用。

2 个答案:

答案 0 :(得分:1)

第一个事实

JobScheduler中,系统在应用程序的JobService中执行您的Job(Task) JobService类也扩展了我们用于定义Service的{​​{1}}类。因此,通过同时使用两者,我们可以在后台执行代码

现在的主要区别是,Foreground Service始终处于运行状态(通过向用户显示通知),并且即使用户线程正在休眠并且没有代码在执行,也会消耗用户的电池和内存。

由于它始终处于运行状态,因此您随时可以随时随地执行所需的任何操作。也许对您的应用程序有利,但对用户不利。您的应用不必要地消耗了电池并消耗了RAM。

为解决此问题,我们得到了Foreground Service。您可以根据某些条件安排要执行的作业。您的应用程序仅在满足条件时才会唤醒,但并不精确,它取决于打do睡模式等许多因素。

您可以详细了解here

结论是

如果不需要在正确的时间执行任务,则应使用JobScheduler(最近JobScheduler更好,因为它在内部使用WorkManager并更先进)来保存用户的电池

并根据官方document

WorkManager适用于可延期的任务,也就是说, 要求立即运行-并要求可靠运行,即使 应用程序退出或设备重新启动。

答案 1 :(得分:-1)

对于您的用例,最好使用WorkManager,根据android文档,它在API 23+上使用JobScheduler以及BroadcastManager和{{1 }},使用API​​ 14-22。

使用AlarmManager,即使您的应用程序退出或设备重新启动,您的作业也将可靠地运行。

https://developer.android.com/topic/libraries/architecture/workmanager