close
当前位置: 物联网在线 > 技术文库 > android >

Android性能模式篇之智能的工作计划(译)

随着需求和业务的发展,越来越多的apps需要去异步执行各种各样的任务,有些任务是用户去执行的,而有些任务则是apps自身需要去执行,这些任务的使用场景有如下示例:

更新网络资源

下载信息

更新后台任务

处理系统服务的回调

如何智能化的去处理这项工作,是至关重要的,如果处理方式得当的话,不仅可以提高你的应用性能,还可以减轻系统的压力,例如通过减少你的应用耗电量,来达到省电的效果。

于是,针对这一需求,JobScheduler应运而生。

目前Android系统已经提供了几种APIs来让你的app安排后台任务,但是我们建议优先选择JobScheduler ,因为JobScheduler API不仅可以选择一个合适的时机去执行任务,提高app和系统的性能。.JobScheduler还具有高度的扩展性和适用性。你可以通过它来执行一个简单的任务,如清除缓存,也可以通过它来执行复杂的任务,如同步你的数据库到云端。

除了JobScheduler ,还有其他一些类似的APIs去帮助安排你的工作计划,它们包括:

AlarmManager

GCM NETwork Manager

SyncAdapter

Additional Facilities

本篇文章简要介绍了JobScheduler和其他API,可以帮助你的应用程序优雅的去安排你的工作计划。

Android Framework JobScheduler

JobScheduler是由Android系统框架所提供,它被用来执行任务或者安排工作计划,目前JobScheduler只能在Android 5.0以上的版本才可以使用,并且一直在不断的完善中,尤其是,在最新的Android N版本中增加了一个新的功能,在ContentProvider
发生改变时触发你的工作计划。

由于JobScheduler是在Android系统框架内实现的,所以当apps选择使用JobScheduler时,它可以通过收集一切有利于安排工作计划和执行任务的有关信息,更好的去完成它的工作。这种方式的批量作业执行允许设备进入和停留在休眠状态更长的时间,保护电池寿命。

通过注册jobs来使用JobScheduler,并指定它对网络和时间的要求,然后Android系统会优雅地安排工作在适当的时间执行,同时,它也将执行必要的工作在遵循Doze and App Standby的限制前提下,另外,JobScheduler也提供了许多方法来定义工作的执行情况。

如果你的应用程序的目标是Android 5(API Level 21)以上,我们建议您使用JobScheduler执行后台任务。关于JobScheduler的更多信息,见其API参考文档。

AlarmManager

AlarmManager API是Android 系统框架提供的另一种选择,用来安排你的工作计划。它的使用场景,一般是app需要在一个特定的时间发布一个通知或在一个特定的时间内发出一个指示信息。

如果你的需求仅仅是执行在一个特定时间的任务,而不考虑其他方面的话,你可以使用AlarmManager。JobScheduler则更加灵活,你可以指定执行的条件,如设备空闲或者充电的时候。

AlarmManager并不遵循Doze and App Standby 的限制,它在运行任务并没有考虑Doze or App Standby模式。需要注意的是,应用程序如果是运行在Doze or App Standby模式下,是无法使用网络应用程序。

Firebase JobDispatcher

是一个开源的库,它和系统框架的JobScheduler非常相似。不过值得一提的是,可以兼容Android 5.0以下的版本。

支持使用Google Play services的调度去执行(运行)的工作,但这个库也允许您定义和使用其他的实现:例如,你可能会决定使用JobScheduler或自定义。

如果你的应用程序需要兼容Android 5.o以下的版本,我们建议你使用。

关于的更多信息,参考其。

GCM Network Manager

GCM Network Manager是Android提供一个可以兼容到5.0以下版本的JobScheduler。它具有JobScheduler所有的优势,但是,它依赖于Google Play services,因为是由Google Play services负责所有工作计划的安排和执行,并达到省电的目的。

GCM Network Manager是的较早版本。目前GCM Network Manager已经停止更新,我们建议您使用。

其他

除了上面所介绍的外,还有SyncAdapter和Services,可以使您的应用程序在特定条件下,更合理的去安排工作计划和执行任务。

SyncAdapter

SyncAdapter类是由系统框架所提供,它的作用是用来管理你的设备和服务器之前的同步任务。Sync adapters相对于以上的几种APIs,有着更为复杂的实现,因为它要求你至少提供authenticator和content provider的实现。因此,如果你只是简单的想在后台同步数据到云端,你应该使用JobScheduler、,或者GCM Network Manager来代替。

如果你的需求更贴近于 SyncAdapter的使用场景,那么你应该使用它。

Services
(责任编辑:ioter)

用户喜欢...

Android Weekly #276 安卓开发周刊 中文版

您是否了解过Android的Lifecycle-Aware库?(android.jlelse.eu) 我们如何了解Lifecycle-Aware库代码? Nishant Srivastava展示了可以跟踪活动或Lifecycle-Aware的Lifecycle Arch组件的片段,并相应地调整其行为。 为Mos...


Android Weekly #275 安卓开发周刊 中文版

MapMe — Android地图适配器 (medium.com) Josh Burton介绍MapMe,是一个用Kotlin编写的Android库,可以将适配器模式带到地图上。 赞助 CloudRail - 连接到API 10x更快 (cloudrail.com) 当我们用单一的界面连接到所...


使用Android Studio开发可独立运行(runnable)混淆过的Jar程序

之前开发Java程序一直都是使用Eclipse 开发Jar程序,现在开发基本上都已经弃用Eclipse了,但是有时偶尔开发个小的Jar程序,还要切换回去好麻烦,刚好前几天有人问几个相关的问题,就顺便整...


Android Weekly #274 安卓开发周刊 中文版

探索Android Oreo上的别后执行限制(medium.com) 在这篇文章中,Joe Birch解释了关于Android Oreo在后台运行服务的变化。 non-Time领主的time – 第5部分 (blog.stylingandroid.com) Mark Allison继续分析JSR 310 date和...


Android Weekly #273 安卓开发周刊 中文版

开源你的Android代码(android.jlelse.eu) 通过您的开源Android代码,您将(希望地)为Android社区提供有价值的代码,收到建设性的反馈,并与您最初建立的内容进行协作从而使您的代码变得更好。这...


Android Weekly #272 安卓开发周刊 中文版

Android Dev 101:每个初学者都应该知道的一些做法() 看一些初学者或媒介等级开发人员(不要错过任何人)应该知道的一些做法,以便更好地摆脱Android框架。 99.9% crash free sessions (medium.com) Chr...


Android Weekly #271 安卓开发周刊 中文版

依赖注入检查(medium.com) 在本文中,MihályNagy引入了依赖注入检查,一种开源注释处理器,可帮助您解决一些出现在所有JSR 330 DI库中常见的问题。 使用Android Studio插件提高效率 (blog.mindorks.com...


Android Weekly #270 安卓开发周刊 中文版

带有RxJava2的SOLID Android分析 (medium.com) 在这篇文章中,Aris Papadopoulos将解释如何正确创建一个分析系统,同时遵循SOLID原则,并使用RxJava2来解决问题。 (blog.stylingandroid.com) Java中的编程时间很难...


Android内存泄漏思考

Android内存泄漏是一个经常要遇到的问题,程序在内存泄漏的时候很容易导致OOM的发生。那么如何查找内存泄漏和避免内存泄漏就是需要知晓的一个问题,首先我们需要知道一些基础知识。...


Android Weekly #269 安卓开发周刊 中文版

在Google上快速提出操作 () Wolfram Rittmeyer分享了开始在Google上快速创建操作所需的所有信息(为了家庭与助理)。 RxJava中的错误处理(rongi.github.io) 一旦开始编写RxJava代码,你就会意识到有些事...