警报管理器与作业计划程序与ScheduledThreadPoolExecutor

时间:2016-12-06 02:55:13

标签: android

这个问题只是为了对这些概念有所了解,以了解业内人士使用这些概念。

如果你能为这些中的每一个提供一些示例用途,我将非常感激。我知道它们是如何工作的,并且确实阅读了关于它们的谷歌文档,但我似乎仍然很难选择其中一个。我不需要你向我解释它们是如何工作的。我只是要求他们的一些示例用途。您最终如何将它们整合到您的应用中以及为什么选择它们而不是其他应用。

由于

1 个答案:

答案 0 :(得分:4)

<强> AlarmManager

使用AlarmManager在系统级别安排任务

AlarmManager提供对系统级警报服务的访问。使用AlarmManager允许应用程序安排可能需要运行或重复超出其生命周期范围的任务。这使得应用程序即使在应用程序进程或其所有Android组件都已被系统清理后也能执行某些功能。

通常,AlarmManager用于触发将来启动服务的PendingIntent。 AlarmManager根据已用时间间隔或特定时钟时间触发服务。如果警报紧急,这两个选项还可以在设备处于睡眠状态时唤醒设备。

当使用不精确的间隔或时间来触发服务时,AlarmManager的好处发挥作用。 Android系统尝试将具有相似间隔或时间的警报批量处理,以便延长电池寿命。通过批量处理来自多个应用程序的警报,系统可以避免频繁的设备唤醒和联网。

使用AlarmManager时需要考虑的一个问题是在设备重启期间会消除警报。应用程序需要在其Android Manifest中注册RECEIVE_BOOT_COMPLETE权限,并在BroadcastReceiver中重新安排其警报。

另一个问题是设计不良的警报可能导致电池耗尽。虽然AlarmManager确实能够唤醒设备并为警报设置准确的时间,但文档提到开发人员在执行网络时应该警惕这些功能。除了通过避免批量报警来耗尽设备的电池之外,如果每个应用程序安装都试图在同一时间与服务器同步,那么设置应用程序与服务器同步的确切时间可能会给服务器带来很大的压力!这可以通过向警报间隔或时间添加一些随机性来避免。

如果应用程序需要在确切的时间或不准确的时间间隔执行本地事件,则AlarmManager是一个很好的调度候选者。闹钟或提醒应用程序是AlarmManager使用的绝佳示例。但是,该文档不鼓励使用AlarmManager来安排与网络相关的任务。我们来看看一些更好的网络选择。

Job Scheduler

JobScheduler以有效的方式帮助执行后台工作,尤其是网络。 JobServices计划根据JobInfo.Builder()中声明的条件运行。这些标准包括仅在设备正在充电,空闲,连接到网络或连接到未计量网络时执行JobService。 JobInfo还可以包括执行JobService的最小延迟和某些截止日期。如果没有满足这些条件,作业将在系统中排队等待稍后执行。系统还会尝试将这些作业一起批处理,以便安排警报,以便在建立网络连接时节省电池寿命。

开发人员可能会担心调度程序会经常延迟触发其JobServices。如果作业经常被延迟并且数据因此过时,那么了解这些事情会很好。 JobScheduler将返回有关JobService的信息,例如它是否已重新安排或失败。 JobScheduler有处理这些场景的后退和重试逻辑,或者开发人员可以自己处理这些场景。

子类化JobService需要覆盖其onStartJob(JobParams params)和onStopJob(JobParams params)方法。 onStartJob()是应放置作业的回调逻辑的地方,它在主线程上运行。在处理长时间运行的作业时,开发人员负责线程化。如果需要进行单独的线程处理,则返回true到onStartJob();如果主线程上可以进行处理,则返回false,并且不再需要为此作业完成任务。开发人员还必须在作业完成时调用jobFinished(JobParameters params,boolean needsReschedule)并确定是否重新安排更多作业。当不再满足初始JobInfo参数时,onStopJob()将被调用以停止或清除任务,例如,如果需要该参数,则用户拔出设备。

实现JobService时可能需要考虑很多,但它比AlarmManager具有更多的灵活性。另一个方便的功能是计划的作业会在系统重新启动后持续存在。

使用JobScheduler至少有一个缺点。截至撰写本文时,它仅与API级别21及更高版本兼容。在这里,您可以找到运行各种API级别的Android设备的分布。虽然技术上没有JobScheduler的后端,但类似的工具是GCM网络管理器。

<强> REFERENCE LINK