热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

智能作业调度

**本文章为官方文档译文,如果错误,请指正**智能作业调度现代应用程序可以在用户交互的直接流程之外异步执行其许多任务。这个异步任务的一些例子是:更新网络资源下载信息更

**本文章为官方文档译文,如果错误,请指正**

智能作业调度

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

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

  智能调度这些工作可以提高应用程序的性能,以及系统健康方面,例如电池寿命。JobScheduler为你做这个调度工作。

   有一些API你可以使用以调度后台工作。这些选项中的主要职责是 JobScheduler。JobScheduler API允许你指定执行任务的稳定条件,以及整个设备的集中式任务调度,已获得最佳的系统运行状态。JobScheduler也提供高度可扩展的功能:它适用于像清楚缓存等这样的小的功能,也使用于像同步数据库到云端这样的大功能。

  除了JobScheduler,还有其它一些机制可以帮助你的程序调度工作。他们包括:

  • AlarmManager
  • Firebase JobDispatcher
  • SyncAdapter
  • Additional Facilities

  此页简单介绍了JobScheduler和其它一些API,它们能帮助应用程序调度工作,以最大化程序性能和系统运行状态。

Android框架JobScheduler

  JobScheduler是Android框架API,以实现调度任务或者工作。JobScheduler在Android5.0(API层级21)第一次引入,并且保持积极发展。尤其,Android7.0(API级别24)增加了基于ContentProvider改变来触发作业的功能。

  JobScheduler在平台中实现,它可以收集有关需要在所有程序中运行的作业信息。该信息在同一时间或者差不多时间用于作业调度。以这种方式执行分批作业,允许设备进入并保持更长的休眠状体,保持电池寿命。

  你可以通过注册作业来使用JobScheduler,并制定他们对于网络和时间的要求。然后,系统在适合的时间优雅的调度执行作业。同时,如果需要,它也遵循Doze and App Standby限制来推迟作业执行。JobScheduler提供很多方法来定义作业执行条件。

  假如你的应用程序目标为Android5.0(API层级21),我们建议你使用JobScheduler去执行后台任务。更多信息关于JobScheduler,请参考其API参考文章。

AlarmManager

  AlarmManager是系统提供的另外一种调度任务的选择。如果应用程序需要发送通知或者设置闹铃,此时该API非常有用。

  你应该仅仅当必须在特定时间执行任务的时候才使用该API,但不要求像JobScheduler允许你指定其它更加强大的执行条件,例如设备空闲和充电检查。

Firebase JobDispatcher

  Firebase JobDispatcher是一个开源库,提供类似于Android平台中JobScheduler的API。Firebase JobDispatcher作业针对Android版本低于5.0(API层级21)应用程序的JobScheduler兼容性层。

  Firebase JobDispatcher支持用户使用Google Play服务作为调度(运行)作业的实现,同时这个库也允许你定义和使用其它的实现:例如,你可能决定使用JobScheduler或者编写自定义自己的代码。因为这些多功能性,我们建议你使用Firebase JobDispatcher,假如你的APP目标Android版本是低于5.0的(API层级21)。

  更多关于Firebase JobDispatcher,请参考其文档和源代码。

附加工具

  除了上述API和库之外,还有同步适配器和服务,可以帮助你的应用程序在特定条件下更好,更强壮的运行。

SyncAdapter

  该框架继续提供了SyncAdapter类以管理在设置和服务器之间同步数据的任务。同步适配器是特别为在设备和云端同步数据设计的,你应该仅仅只在此种任务中使用它们。同步适配器比上面提到的库和API有更加复杂的实现,因为它至少需要一个伪造的authenticator和content provider实现。因为这个原因,一般不应该创建同步适配器仅仅为了在后台同步数据到云端。你应该尽可能的使用JobScheduler,Firebase JobDispatcher或者GCM Network Manager替代。

  在Android N(API层级24),SyncManager在JobScheduler之上。如果需要其提供的附加功能,则只应使用SyncAdapter类。

Services

 服务框架允许你在后台执行长时间运行的操作。我们建议使用前台服务执行那些需要为用户驻留的任务,例如播放音乐。绑定服务还可以用于各种情况,例如,仅当用户在一个fragment或者activity的页面时才需要运行服务。

 你应该避免为那些无限制时间或者周期性任务开始的服务,因为他们持续使用设备资源即使当他们不再执行任务的时候。相反,你应该使用该页面描述的其它解决方案,并提供本机生命周期管理。开始使用服务仅仅作为最后的手段。Android平台可能在将来不再支持服务。

附加点

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

  • 互联网门户网站,VPN和代理会造成互联网连接检测问题。一个库或者API可能认为网络可用,但是你的服务可能无法访问。正常失败,并尽可能少的重新安排任务。
  • 根据你为运行任务分配的条件,例如网络可用,在任务触发之后,可能会发生改变,以便不在满足该条件。在这种条件下,你的操作可能失败并且重复出现。因此,你应该编写后台逻辑任务,以注意任务的持续失败,并执行指数退避以避免无意中资源的过度使用。
  • 请记住使用指数退避当重复安排任何工作的时候,尤其在使用AlarmManager的时候。假如你的应用程序使用了JobScheduler,Firebase JobDispatcher或者同步适配器,则会自动使用指数退避。

 

原文地址:https://developer.android.google.cn/topic/performance/scheduling.html


推荐阅读
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
author-avatar
双眼皮的猪猪2012
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有