0. 前言

在Android Lollipop版本中增加了JobScheduler API,JobScheduler翻译为任务调度器,可以替代WakeLodk和Alarm运行任务。那么它们的区别在哪呢?JobScheduler又有什么特别之处呢?本文原创,转载请注明出处为SEU_Calvin的博客

1.  JobScheduler的省电功能

之所以说JobScheduler可以替代WakeLodk和Alarm运行任务,是因为后者在每个APP中是相互独立的,而JobScheduler运行在操作系统层面。举个例子,如果10个APP每半小时唤醒设备一次,由于这些任务的执行时机不可能同步,因此使用WakeLodk和Alarm一个小时内设备被唤醒了20次!但由于JobScheduler是操作系统层面的,因此系统会更有效地执行所有调度工作,每小时设备的唤醒次数会显著减少。

可能有朋友会问了,那使用JobScheduler每小时设备被唤醒次数被降低到多少次呢?这个还真说不准,为什么说不准。是因为JobScheduler允许设定获取数据的时间间隔,比如把唤醒时间限制在8min后10min之前,这就给操作系统留出了一定的调整范围,使系统更好地协调设备唤醒任务,会达到一定的省电效果。2014年Google开发大会上指出,如果每个APP都使用这个API,那么可以节约15%到20%的电量。

2.  JobScheduler拥有更多的触发选项

JobScheduler比AlarmManager有更多的触发选项,后者只有一个定时功能。

//Use the android.app.job.JobInfo.Builder toconfigure how the scheduled task should run.
//You can schedule the task to run underspecific conditions, such as:
//1.The device is charging
//2.The device is connected to an unmeterednetwork
//3.The system deems the device to be idle
//4.Completion with a minimum delay or within aspecific deadline

这四个例子包括充电状态、Wifi状态、设备空闲以及延长失败链接后重连的间隔时间, JobScheduler包下了这些状态的检测。有助于开发者configure how the scheduled task should run。

3.  JobScheduler的一些补充

JobScheduler一个值得一提的是执行重复工作的能力,上面的状态4也提到了,这里的重复工作执行周期可以是线性的,也可以是指数性衰减的,即JobScheduler有两种延时工作的衰减方式,即线性衰减和指数衰减。

因为当我们的APP不处于前台时,可能并不需要这种频繁的数据更新,当然你依旧频繁的数据更新也没有让用户把耗电的罪名怪到你头上,因此为了Android生态的更加美好,我还是建议你如果看到了这篇文章,请尽可能的优化好你的APP。

关于JobScheduler的具体使用等可以参考这篇文章

Android开发——JobScheduler机制的更多相关文章

  1. Android开发——Accessibility机制实现模拟点击(微信自动抢红包实现)

    1. 何为Accessibility机制 许多Android使用者因为各种情况导致他们要以不同的方式与手机交互.对于那些由于视力.听力或其它身体原因导致不能方便使用Android智能手机的用户,And ...

  2. Android开发学习之路-回调机制学习笔记

    不知道是我学Java的时候没有认真听还是怎么的,曾经一直不知道什么是“回调”,它有什么用,百度一大堆,都太复杂看不明白(好吧是我笨),所以想把自己理解的分享给其他看到的人,大家都真正认识一下这个重要的 ...

  3. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  4. 《Android开发艺术探索》读书笔记 (2) 第2章 IPC机制

    2.1 Android IPC简介 (1)任何一个操作系统都需要有相应的IPC机制,Linux上可以通过命名通道.共享内存.信号量等来进行进程间通信.Android系统不仅可以使用了Binder机制来 ...

  5. Android开发之漫漫长途 Ⅵ——图解Android事件分发机制(深入底层源码)

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  6. Android开发之漫漫长途 ⅥI——Android消息机制(Looper Handler MessageQueue Message)

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  7. 《android开发艺术探索》读书笔记(十)--Android的消息机制

    接上篇<android开发艺术探索>读书笔记(九)--四大组件 No1: 消息队列MessageQueue的内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表,因为单链表 ...

  8. 《android开发艺术探索》读书笔记(二)--IPC机制

    接上篇<android开发艺术探索>读书笔记(一) No1: 在android中使用多进程只有一种方法,那就是给四大组件在AndroidMenifest中指定android:process ...

  9. Android开发艺术探索——第二章:IPC机制(中)

    Android开发艺术探索--第二章:IPC机制(中) 好的,我们继续来了解IPC机制,在上篇我们可能就是把理论的知识写完了,然后现在基本上是可以实战了. 一.Android中的IPC方式 本节我们开 ...

随机推荐

  1. WOSA/XFS PTR Form解析库—FormRule.h

    #ifndef _FORMRULE_H_#define _FORMRULE_H_ #include <XFSPTR.H>#include <string>#include &l ...

  2. iOS 开发之环形倒计时进度条(虚线/实线)

    代码很简单,一看便知.这里为顺时针,若想要逆时针,clockwise改为0,还需更改起始角度和终点角度. 源码地址:https://github.com/LfyDragon/CountDown 直接上 ...

  3. javascript获取网页各种高宽及位置总结

    screen对象 获取屏幕的高宽(分辨率) screen.width //屏幕的宽 screen.height //屏幕的高 screen.availWidth //屏幕可用宽度 屏幕的像素高度减去系 ...

  4. 从零自学Java-4.使用字符串来交流

    1.使用字符串来存储文本: 2.在程序中显示字符串: 3.在字符串中包含特殊的字符: 4.拼接字符串: 5.在字符串中包含变量: 6.比较字符串: 7.判断字符串的长度: 程序Credits:显示一部 ...

  5. 【SPL标准库专题(10)】SPL Exceptions

    嵌套异常 了解SPL异常之前,我们先了解一下嵌套异常.嵌套异常顾名思义就是异常里面再嵌套异常,一个异常抛出,在catch到以后再抛出异常,这时可以通过Exception基类的getPrevious方法 ...

  6. oracle中insert 多条数据方法

    oracle中的insert 和 mysql添加多条数据的 方式不太一样 用到的语法: insert all into 表名(需要添加的表字段)values(添加的字段数据一定要对应字段顺序) int ...

  7. wc 统计文件的行数,字数,字符

    格式:wc 参数 文件  默认统计文件的行数,字数,字符. -l   统计有多少行数 -c   统计有多少个字节 -m  统计有多少个字符 -w 统计有多少个字数

  8. python set集合一些基本方法

    set集合是一个无序且不重复的元素集合 这个数据类型没有重复的,而且也没有顺序 一些基本的方法: 添加元素 s1 = {11, 22, 33} s1.add(123)#添加一个新的元素 print(s ...

  9. Linux 辅助命令

    0. 说明 记录在 Linux 使用过程中的一些有帮助的命令 1. 命令集合 [1.1 错误输出重定向] # 将错误信息重定向到 /dev/null source /xxx >/dev/null ...

  10. fedora27安装谷歌浏览器Chrome

    安装 添加chrome源 #cd /etc/yum.repos.d #wget http://repo.fdzh.org/chrome/google-chrome-mirrors.repo 安装Chr ...