android.app.job.JobScheduler而不是WakefulBroadcastReceiver用法

时间:2017-08-30 15:14:20

标签: android android-wake-lock

正如here所述,不推荐使用通常的类WakefulBroadcastReceiver

因此,现在无法创建像以前的SDK版本那样的计划任务。谷歌说,我必须使用

https://developer.android.com/reference/android/app/job/JobScheduler.html

但是怎么样?

那么,现在背景计划任务最有用的解决方案是什么?

AlarmManager不再有用吗?

我的应用程序每天唤醒几次并使用AlarmManager更新通知。我不确定我要改变什么。我要实施什么?旧API和新API?或者只是最新的解决方案?

1 个答案:

答案 0 :(得分:5)

  

现在无法创建像以前的SDK版本那样的计划任务

WakefulBroadcastReceiver从未成为唯一的选择。例如,我的WakefulIntentService可以追溯到2009年。添加到支持库中的the JobIntentService取代了这两者。

  

但是怎么样?

嗯,the JavaDocselsewhere in the documentation涵盖了JobScheduler,以及有关Android应用开发的书籍和课程。

  

现在什么是最有用的后台计划任务解决方案?

这完全取决于你想要如何定义“有用”,我不知道你的定义。

一般来说:

  • 尽可能使用JobScheduler

  • 如果您正在编写闹钟应用,请在setAlarmClock()上使用AlarmManager

  • 使用set...()上的其他AlarmManager方法向前兼容Android 5.0设备,可能是通过包装程序库(例如,Evernote的android-job

  • 在可行的情况下使用推送消息传递(例如,FCM),如果您有能力依赖推送消息传递解决方案

  

AlarmManager不再有用吗?

对某些“有用”的定义“任何类型的定期后台工作”已经“不再有用”。在Android 6.0中引入的打盹模式和应用程序待机,从用户的角度来看,基本上使定期后台工作不可靠。

  

我必须实施什么?旧API和新API?或者只是最新的解决方案?

抽象地回答这个问题是不可能的。 Android 8.0或支持库中没有任何内容可以阻止您像以前一样使用AlarmManager