[译]图解Android应用的后台任务和提醒
2016-06-18 12:06
316 查看
原文:A flowchart for background work, alarms, and your Android app
对于很多应用而言,构建后台任务是重要的一环。其中一种方式是:使用
(我们已后会继续深入讨论休眠模式和应用待机模式!)
在Android API 19+使用
如果细心观察,会发现
上述API支持单个和周期任务,缺少了唤醒沉睡设备的能力,但有能力等待网络接通,电池充电,利用自动退出和重试,重启机制和系统批量任务(意味着省电)。
有各种好理由说服你使用
对于很多应用而言,构建后台任务是重要的一环。其中一种方式是:使用
AlarmManager注册定时器唤醒未在前台启动的应用(例如闹钟,译者注)。如何优雅低使用定时器类和API,它们是不是你的最佳选择?下面让我们看看如何抉择。
唤醒频率?
对于少于60秒的唤醒,定时器类并不是最优解:使用更高效的的Handler来处理频发的任务。
希望用户看到计时?
对于API21+(Android5.0以上,译者注),新
API允许使用
setAlarmClock()方法来设置一个可见的定时器:系统UI通过
getNextAlarmClock()更新时间和图标。注意
setAlarmClock()可以在设备/应用休眠时生效(类似于
setExactAndAllowWhileIdle()):更形象的描述是类似来电唤醒。为了向后兼容,你可以继续往下看。
休眠唤醒(例如,待机应用)?
在Android 6.0+(API 23),休眠模式下新增了休眠模式(在完全静止,不充电,闲置时启动)和应用待机模式(不充电,未使用一段时间)。偷懒可以调用setAndAllowWhileIdle()或者精准调用
setExactAndAllowWhileIdle()来唤醒上述空闲状态。为了完全符合Android标准和节省电量,使用标准的
set()和
setExact()方法等到用户打开你的应用后再提醒。
(我们已后会继续深入讨论休眠模式和应用待机模式!)
只是唤醒?
单个定时器可以恰当地使用set()方法设置,需要注意的是,这个方法并不准确,当目标##Android API**版本大于或等于19,可能与批量定时器一样——在到达结束时间点前,计时器并不会休眠,但时间结束后进入休眠。如果对于开始时间比较宽松,结束时间比较严格,考虑使用
setWindow()加强对准确时间段的控制。
在Android API 19+使用
setExact()设置精确的定时器,只有在需要精准时刻的时候使用(例如日历提醒器)
需要以固定频率重复?
对于反复定时器,批量是一个好的省电策略。setInexactRepeating()正是实现的好方法。
API 19以前,可以使用常量
INTERVAL_(例如,
INTERVAL_HOUR实现批量固定间隔的定时器)。对于
API 19+的设备,所有重复的定时器(无论是否设置了
INTERVAL_),只要设置**
setInexactRepeating()都会成为批量定时器。
如果细心观察,会发现
setRepeating()——类似
set(),从API 19开始,就成为不精确的重复。也就是说,在大于等于API 19的设备上,
setRepeating()会调用
setInexactRepeating()。如果真的需要精确,使用
setExact(),在唤醒成功之后再次设置定时器。记得考虑电量情况!
等一等,真的需要定时?
如果真的想省电,在API 21+考虑使用JobScheduler,或者在Android API9而且
Google Service全开时使用
GcmNetworkManager(嗯,天朝自动忽略,译者注)
上述API支持单个和周期任务,缺少了唤醒沉睡设备的能力,但有能力等待网络接通,电池充电,利用自动退出和重试,重启机制和系统批量任务(意味着省电)。
有各种好理由说服你使用
JobScheduler和
GcmNetworkManager,点这里构建更好的应用
相关文章推荐
- Android之ViewPagerIndictor三角形指示器
- 基础动画的使用
- Android启动过程深入解析
- RxJava入门指南及其在Android开发中的使用示例
- android6.0问题汇总
- Android studio 添加和移除Module
- 使用Xamarin插件和VS2010开发android应用程序(一)
- Android开发(51) 摄像头自动对焦。在OpenCV图像识别中连续拍照时自动对焦和拍照。
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- 理解和使用Android Studio
- Android入门笔记
- Android studio 构建太慢
- android中Invalidate和postInvalidate的区别
- Android day8
- android:descendantFocusability用法简析
- Android不同版本的版本号
- 《Android开发艺术探索》之View事件分发机制
- android 百度地图入门01 (史上最详没有之一)
- Android中用layer-list编写阴影效果
- 判断是为魅族系统(Flyme OS)