Contents

智能任务调度... 1

Android Framework JobScheduler 1

AlarmManager 1

Firebase JobDispatcher 2

其他功能... 2

SyncAdapter 2

Services. 2

最佳实践... 2

智能任务调度

现在的应用程序可以异步执行很多操作,而不需要用户参与。例如:

  • 更新网络资源
  • 下载
  • 后台任务更新
  • 调度系统服务呼叫

智能调度任务能够提高性能,同时还能保护电池,降低耗电。JobScheduler负责调度。

有很多API帮你调度后台任务。最主要是JobScheduler。JobScheduler即可以允许你指定各种情况,触发任务,也可以集中在某个时间短执行,降低耗电。JobScheduler可以提供稳健的服务:既适合像清除缓冲这样的小任务,也适合同步数据库到云端。

除了JobScheduler,还有其它的很多API。包括:

  • AlarmManager
  • Firebase JobDispatcher
  • SyncAdapter
  • Additional Facilities

注意:WorkManager是一个新API,目前还在alpha阶段,它保证你调度后台任务(不管应用进程是否依然存在)。WorkManager为API14的设备提供像JobScheduler这样的API,即使没有Google Play Services。WorkManager可以查询(可见的),支持流畅的图像任务。如果你正在使用JobScheduler,FireBaaseJobScheduler或者AlarmManager和BroadcastReceivers,应该考虑用WorkManager替换。

这里提供了JobScheduler和其他API的简单使用介绍。

Android Framework JobScheduler

JobScheduler是调度任务的。最早在Android 5.0(API21)中出现,现在依然在开发。注意,Android7.0(API24)添加了监听ContentProvider调度任务的功能。

JobScheduler在平台中实现的,允许收集所有应用的调度信息。这个信息可以使得系统知道在什么时间执行什么调度。批量处理调度可以使得设备更长时间处于睡眠状态从而省电。

通过JobScheduler注册任务,指定他的触发需求,比如联网或时间。系统会很好的调度他们。同时,在Doze或者应用待机状态延迟任务调度。JobScheduler提供了很多方法让你指定任务触发方法。

如果你的系统运行在Android5.0(API21)以上,强烈建议你使用JobScheduler。

AlarmManager

AlarmManager也是系统提供的一个调度API。他主要用在应用需要发出通知或者需要启动一个特定的闹钟时。

使用AlarmManager,触发条件应该仅限特定时间执行,不应该制定其他条件,像设备空闲,检测 到充电,等。

Firebase JobDispatcher

Firebase JobDispatcher是Android系统提供的类似于JobScheduler的API。Firebase JobDispatcher为低于Android5.0系统的设备提供了JobScheduler兼容层。

Firebase JobDispatcher支持使用Google Play作为调度实现。如果你想自己实现JobScheduler的功能,可以在Firebase JobDispatcher的基础上实现,但这毕竟属于特殊的情况,但如果你的系统运行在Android5.0以下的版本,强烈建议你使用Firebase Dispatcher。

其他功能

除了上面的API和库,还有sync adapter和服务,在某些特殊的时候使用,为系统提供了更加丰富的功能。

SyncAdapter

提供依然提供SyncAdapter的功能来管理设备和服务器之间的数据同步。Sync adapter专门用于设备和云端进行数据同步。Sync Adapter跟其他的API和库相比复杂些,因为他至少需要一个假的authenticator和一个实现好的ContentProvider。由于这些原因,如果只需要在后台与服务器同步,不建议使用SyncAdapter。尽可能的使用JobScheduler,Firebase JobDispatcher或GCM Network Manager。

在Android N(API24),SyncManager在JobScheduler的上层,除非使用SyncManager提供的特殊的功能,尽量不用这个API。

Services

Service允许你指定在后台长期运行的任务。我们建议使用前台任务,用户一直可以看到并操作,像播放音乐。Bound服务仍然在用,例如:用户打开某个Activity或者Fragment时候绑定服务做一些事情。

应该避免使用start服务或者让服务周期性执行任务,因为这样即使不在执行任务了,他依然在消耗资源。应该尽量使用本文描述的其他的API,最后在考虑使用start 服务,将来start服务的功能可能会不再支持。

最佳实践

不管你选择哪个方案,记住以下几点:

  • 获得网络端口,VPN和代理可能会发现网络问题。但是API和库会认为网络是可达的,合理处理这种情况,给用户友好的界面。同时尽可能少的重新调度。
  • 基于你的设定的条件调度任务,但是当调度开始执行时,条件可能已经不满足了,合理处理这些。并且在你的任务处理中,要有发现任务持续失败的代码,然后作出处理,使用指数后退机制重新调度。
  • 记住使用指数后退机制重新调度任务,尤其是AlarmManager。如果你用的是JobScheduler,Firebase JobDispatcher或者Sync adapter,指数调度是自动执行的。

Android 智能任务调度相关推荐

  1. 基于tcpdump的Android智能移动终端数据包捕获完整解决方案

    基于tcpdump的Android智能移动终端数据包捕获完整解决方案 参考文章: (1)基于tcpdump的Android智能移动终端数据包捕获完整解决方案 (2)https://www.cnblog ...

  2. android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升

    android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升 转载于:https://www.cnblogs.com/jeanschen/p/3507512.html

  3. android wifi视频监控软件,WiFi环境下Android智能视频监控系统研究与实现

    摘要: 在互联网飞速发展和移动互联网强势崛起的时代,科技产品服务于普通生活是新兴行业必然的发展趋势;监控系统是物联网时代各个领域必然争取的可控制系统.随着无线技术和移动终端设备的高歌猛进,移动终端智能 ...

  4. 智能android电视更换播放器,GitHub - qfwc258/TvPlayer: android智能电视播放器,可以播放各电视台节目,播放基于ijkplayer的实现。...

    TvPlayer 1,android智能电视播放器,可以播放各电视台节目,播放基于ijkplayer的实现 2,测试的源地址可能失效,如需测试可以自己更换播放源.HttpUtils.getOfflin ...

  5. Android智能电视应用程序开发浅谈(二)

    Android应用程序的布局有两种,一种是在res/layout下面的xml文件里布局,一种是直接在java代码里布局,而Android智能电视有多种分辨率,我们可以建立多个适应不同分辨率的资源文件, ...

  6. Android智能指针SP WP使用方法介绍

    Android手机操作系统既然是开源的操作系统.那么在具体的文件夹中就会存放着各种相关功能的开源代码.我们在使用的时候可以根据这些源代码进行相应的修改就能轻松的完成我们所需的功能.在这里大家就一起来看 ...

  7. android 智能电视 电视盒子 安卓嵌入式硬件LAN压力测试

    android 智能电视 电视盒子 安卓嵌入式硬件LAN压力测试 android 智能电视 电视盒子 安卓嵌入式硬件LAN压力测试 android环境下部分必须用到的查询命令 操作命令 LAN口使用a ...

  8. Android智能硬件开发心得总结(二)

    Android智能硬件开发心得总结(一) 6.关于屏幕显示 每次一个新项目的开发,我所做的第一件事就是确定所选定显示屏的型号规格,然后将规格书发给主板供应商让其先调屏参. 调屏参是很可能会出现无法点亮 ...

  9. 购买2019最佳性价比Android智能手表(smart watch)

    目前,有许多用户使用Android,Topwelltech promotion d'été优化了各种Android智能手表,在所有Android设备上进行了良好的交互,并具有您期望的智能应用和健身功能 ...

最新文章

  1. excplise tomcat启动过程中类找不到
  2. python在中小学教学中的应用-小学信息技术教学中进行Python 编程语言教学的策略...
  3. Scrapy介绍及入门
  4. get_attribute中的value是什么类型的?_建设工程项目中都有什么类型的监理?
  5. transformer模型_【经典精读】Transformer模型深度解读
  6. C#实现HTTP协议:多线程文件传输
  7. Android 蓝牙开发,申请打开蓝牙
  8. PCA对特征点描述子降维
  9. 网络流 小结(更新时间2015/8/8)更新中
  10. mxnet系列 安装
  11. js 字符串换行_JS代码编程中经常用到的超长字符串换行方法,你最喜欢哪一种?
  12. Java txt转xml中文乱码_JAVA dom4j实现String字符串转换成XML文件(解决中文乱码问题)...
  13. vue安装vue-pdf(预览pdf)
  14. 樊登读书搞定读后感_《读懂一本书:樊登读书法》读后感10篇
  15. 罗振宇2018“时间的朋友”跨年演讲未删减全文
  16. 记录方维p2p项目后台登录自动化测试验证码问题
  17. YTU OJ 2476 C++习题 继承与组合
  18. Java多线程基础(下)
  19. 摆脱客户端?网页发起直播势在必行!
  20. 国际“知识共享”运动的现状

热门文章

  1. 【阿里云云计算工程师 ACP 认证】02、弹性块存储 EBS
  2. centos安装exfat
  3. 重磅新星再现《天下贰》 与你共创3D大场面
  4. 熔化焊包括哪五种_常用的几种熔焊方法
  5. 个人简历管理系统(6)-登陆与注册后端实现
  6. 808. 分汤 : 挺有意思的 DP 题
  7. 根据打印机IP传输打印文件
  8. Kubernetes Dashboard集成Heapster
  9. IT工程师面试必备的编程能力
  10. 戴德金--连续性和无理数--我自己做的中文翻译第7页