Android - JobScheduler或BroadcastReceiver?

时间:2016-06-02 11:53:29

标签: android broadcastreceiver android-jobscheduler

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

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

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

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

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

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

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

谢谢。

2 个答案:

答案 0 :(得分:0)

  

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

使用JobScheduler ,这可以提高应用程序的性能以及系统运行状况,例如电池寿命。此外,JobScheduler会在设备重新启动后保持不变,并支持批处理调度,Android系统可通过该批处理调度合并待处理的作业,从而减少电池使用量。此外,您可以区分Android版本,因此可以在Lollipop及更高版本上使用JobScheduler,在旧版本上使用AlarmManager。

  

在使用JobScheduler的情况下,我应该只安排一次作业,然后始终返回true以强制重新安排时间吗?

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

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

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

答案 1 :(得分:-2)

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