【后台任务】智能地安排工作(8)

概要


现代应用程序可以在用户交互的直接流程之外异步执行其许多任务。这些异步任务的一些例子是:

  • 更新网络资源。
  • 下载信息。
  • 更新后台任务。
  • 调度系统服务调用。

智能地安排这项工作可以提高应用程序的性能,以及系统健康状况(如电池寿命)。JobScheduler 这个计划是否适合你?

有几个API可供您的应用程序用于安排后台工作。这些选项中的主要是JobScheduler。该JobSchedulerAPI允许您指定用于执行任务的强大条件,以及整个设备的集中任务调度以实现最佳系统健康状况。JobScheduler还提供了高度可扩展的功能:它适用于清理缓存等小型任务以及将数据库同步到云中等大型任务。

除此之外JobScheduler,还有其他一些工具可用于帮助您的应用程序安排工作。这些包括:

注意:WorkManager是一个新的API,目前处于Alpha版,允许您安排需要保证完成的后台任务(无论应用程序进程是否在附近)。WorkManager为API 14+设备提供类似JobScheduler的功能,即使没有Google Play服务的设备也可以。WorkManager是可查询的(可观察的),对工作图和流畅的API有强大的支持。如果您使用JobScheduler,FireBaseJobScheduler和/或AlarmManager plus BroadcastReceivers,则应考虑使用WorkManager。要了解更多信息,请参阅工作经理。

此页面提供简要介绍JobScheduler 以及其他可帮助您的应用程序安排工作以最大化应用程序性能和系统健康状况的API。要查看正在使用的API的示例,请导航到GitHub上的 Android JobScheduler示例

Android框架JobScheduler


JobScheduler是用于调度任务或工作的Android框架API。它首先在Android 5.0(API级别21)中可用,并且仍在积极开发中。值得注意的是,Android 7.0(API等级24)增加了基于ContentProvider变化触发作业的能力 。

JobScheduler在该平台中实施,该平台允许其收集有关需要在所有应用上运行的作业的信息。这些信息用于安排作业在同一时间或周围运行。以这种方式批量执行作业可使设备进入睡眠状态并保持更长时间,从而延长电池寿命。

您可以JobScheduler通过注册作业来使用,指定他们对网络和时间的要求。然后系统正常安排作业在适当的时间执行。同时,它还根据需要延迟工作执行,以遵守 打盹和应用待机限制。 JobScheduler提供了许多方法来定义作业执行条件。

如果您的应用目标为Android 5.0(API等级21),我们建议您使用该 JobScheduler来执行后台任务。有关更多信息JobScheduler,请参阅其 API参考文档

AlarmManager


该AlarmManagerAPI是框架为计划任务的另一种选择。此API在应用程序需要发布通知或在特定时间启动闹钟的情况下非常有用。

您只应将此API用于必须在特定时间执行的任务,但不要求JobScheduler允许您指定的其他更强健的执行条件 ,例如设备空闲和计费检测。

Firebase JobDispatcher


Firebase JobDispatcher是一个开源库,提供与JobSchedulerAndroid平台类似的API 。 Firebase JobDispatcher充当JobScheduler适用于Android版本低于5.0(API级别21)的应用程序的 兼容层。

Firebase JobDispatcher支持将Google Play服务用作调度(运行)作业的实现,但该库还允许您定义和使用其他实现:例如,您可能决定使用 JobScheduler或编写自己的自定义代码。由于这种多功能性,如果您的应用的Android版本低于5.0(API级别21),我们建议您使用此 Firebase JobDispatcher。

有关 Firebase JobDispatcher的更多信息 ,请参阅其 文档和源代码

额外的设施


除了上述的API和库之外,还有同步适配器和服务可以使您的应用在特定条件下更好更强健地执行。

SyncAdapter

该框架继续提供SyncAdapter用于管理在设备和服务器之间同步数据的任务的 类。同步适配器专门设计用于在设备和云之间同步数据; 你应该只使用它们来完成这种类型的任务。同步适配器比上面提到的库和API更复杂,因为它们至少需要伪造的 认证器和 内容提供者实现。出于这些原因,您通常不应创建仅用于将数据同步到后台云中的同步适配器。只要有可能,你应该使用 JobScheduler, 火力地堡JobDispatcher,或 GCM网络管理器。

在Android N(API级别24)中,SyncManager位于顶部JobScheduler。SyncAdapter 如果您需要它提供的附加功能,则只应使用 该类

服务

该服务 框架允许你在后台执行长时间运行的操作。我们推荐用于任务的前台服务,例如播放音乐,这些任务需要留给用户驻留。绑定服务对于各种使用情况也同样有用:例如,只有当用户正在查看片段或活动时才需要运行服务。

您应该避免使用永久运行的已启动服务或执行定期工作,因为即使它们不执行有用的任务,它们仍会继续使用设备资源。相反,您应该使用本页面描述的其他解决方案,并提供本地生命周期管理。使用已启动的服务仅作为最后的手段。Android平台未来可能不支持启动的服务。

最佳实践


无论您采用何种解决方案,请牢记以下几点:

  • 互联网门户,×××和代理可能会导致互联网连接检测问题。图书馆或API可能认为互联网可用,但您的服务可能无法访问。优雅地失败并重新安排尽可能少的任务。
  • 根据您为任务运行指定的条件(例如网络可用性),在任务被触发后,可能会发生更改,以便不再满足这些条件。在这种情况下,您的操作可能会意外和重复失败。出于这个原因,您应该编写后台任务逻辑来注意任务持续失败的情况,并执行指数回退以避免无意中过度使用资源。
  • 切记在重新计划任何工作时使用指数退避,特别是在使用时AlarmManager。如果应用程序使用 JobScheduler, 火力地堡JobDispatcher,或同步适配器,指数退避时自动使用。

    Lastest Update:2018.05.24

联系我

QQ:94297366
微信打赏:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ

公众号推荐:

【后台任务】智能地安排工作(8)

猜你喜欢

转载自blog.51cto.com/4789781/2124450
今日推荐