zoukankan      html  css  js  c++  java
  • Android开发——JobScheduler机制

    0. 前言

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

    1.  JobScheduler的省电功能

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

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

     

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

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

    //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的具体使用等可以参考这篇文章

  • 相关阅读:
    【转载】uboot的工具mkimage使用方法
    u-boot-2010.3移植到Tiny6410问题总结
    【转载】 GNU GCC 选项说明
    【转载】GCC 预处理器选项
    用kermit通过串口往nandflash任意地址里烧写任何文件!
    自己写Tiny6410的Bootloader总结!
    ARM常用汇编指令介绍
    Ubuntu14.04和Tiny6410挂载NFS服务!
    Tiny 6410的Linux学习总结!
    Tiny6410下的第一个Linux驱动程序
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461442.html
Copyright © 2011-2022 走看看