3

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

现在我正在考虑将 JobScheduler 用于 Android 5.0+,但我看到的是,使用 JobScheduler,我必须在应用程序中安排我的工作,方法是调用

JobScheduler.schedule(JobInfo);

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

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

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

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

谢谢你。

4

2 回答 2

1

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

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

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

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

  1. 正如您所猜测的那样,只安排一次您的工作,并且总是在 jobFinished() 中返回 true - 这应该可以解决问题。

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

于 2018-07-31T09:43:12.267 回答
-2

Jobscheduler 在后台运行并在重新启动后持续存在,所以你应该没问题。

于 2017-01-10T15:21:00.267 回答