Android - JobScheduler 或 BroadcastReceiver?

标签 android broadcastreceiver android-jobscheduler

在我的 Android 应用程序中,每次用户插入他们的设备时我都需要做一些工作。为此,我现在使用 BroadcastReceiver,它会在用户插入设备时启动我的 IntentService 来完成工作,并在设备拔出时停止它。

现在我正在考虑使用适用于 Android 5.0+ 的 JobScheduler,但我看到的是使用 JobScheduler,我必须通过调用

在应用程序中安排我的工作
JobScheduler.schedule(JobInfo);

但这对我来说是个问题,因为我希望我的工作在用户每次将他们的设备连接到充电器时运行,即使用户不必打开我的应用程序也是如此。

出于这个原因,我认为一种方法是在用户第一次打开应用程序时安排它,然后总是强制重新安排,因为我不能相信用户每天都打开我的应用程序(由于性质我的应用程序,肯定不会发生)。

那么,对于 Android 5.0+,我应该坚持使用 BroadcastReceiver 还是使用 JobScheduler?

在使用 JobScheduler 的情况下,我是否应该只安排我的工作一次然后总是返回 true 以强制重新安排?

谢谢。

最佳答案

So, should I stick with BroadcastReceiver or use JobScheduler for Android 5.0+?

使用 JobScheduler,这可以提高您应用的性能,以及电池生命周期等系统健康状况。此外,JobScheduler 通过设备重启持续存在,并支持批处理调度,Android 系统可以通过批处理调度合并挂起的作业,从而减少电池使用。此外,您可以区分 android 版本,因此在 Lollipop 及更高版本上使用 JobScheduler,在旧版本上使用 AlarmManager。

And in the case of using JobScheduler, should I schedule my job only once and then always return true in order to force rescheduling?

现在,有两种方法可以做到这一点:

  1. 如您所料,只安排一次作业并始终在 jobFinished() 中返回 true - 这应该可以解决问题。

  2. 完成一项作业(最初由您通过调用 JobScheduler.schedule(JobInfo) 安排)后,您可以通过调用相同的作业来安排另一项作业。一旦每项工作即将完成,这将安排后续工作。

关于Android - JobScheduler 或 BroadcastReceiver?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37591128/

相关文章:

android - WakefulBroadcastReceiver 是否需要 IntentService 才能保持唤醒锁?

java - LinearLayout 上的监听器

android - Gradle 不生成带引号的字符串

android - 我如何知道哪个应用程序版本正在被 Android 取代?

android - 在 sqlite 数据库更改时自动刷新 ListView - Android 聊天应用程序

android - IntentService + startForeground 与 JobIntentService

c# - 如何在 Xamarin Android 中实现 JobScheduler

android - JobScheduler 问题 android

android - 在Android中导入库项目的更好方法

java - 代码创建线性布局(无 XML)并设置元素权重