BPFP系列:优化电池使用时间:根据需要操作广播接收器
2016-04-13 15:36
423 查看
本文翻译或摘取自google官方文档 Best Practices for Performance http://developer.android.com/intl/zh-cn/training/best-performance.html
优化电池使用时间
为了打造一个优秀的应用,您应设法降低应用对电池使用时间的影响。阅读完本教程后,您就可以让自己构建的应用根据其所在设备的状态来监控和调整自身的功能和行为。
要确保在不影响用户体验的情况下最大程度地降低应用对电池使用时间的影响,您可以采取一些措施,例如在网络连接断开时停用后台服务更新,或在电池电量较低时降低此类更新的频率。
根据需要操作广播接收器
监控设备状态变化的最简单方法就是,为您监控的每种状态创建
此方法的负面影响在于,只要系统触发了这些接收器中的任何一个,相关应用就会唤醒设备,其频率可能会远远超过所需的水平。
更好的方法是在运行时停用或启用广播接收器。这样的话,您就可以将自己在清单中声明的接收器用作被动提醒,只有在需要时才会由系统事件触发。
您可以使用
在使用此技巧时,如果您确定连接已断开,就可以停用除连接变化接收器外的所有接收器。相反,成功连接后,您就可以停止侦听连接变化,同时只需在执行更新和重新安排重复更新提醒前查看是否在线即可。
您可以使用同样的方法来延迟需要较高带宽的下载任务。只有在连接 Wi-Fi 后,您才能直接启用用于侦听连接变化和启动下载任务的广播接收器。
优化电池使用时间
为了打造一个优秀的应用,您应设法降低应用对电池使用时间的影响。阅读完本教程后,您就可以让自己构建的应用根据其所在设备的状态来监控和调整自身的功能和行为。
要确保在不影响用户体验的情况下最大程度地降低应用对电池使用时间的影响,您可以采取一些措施,例如在网络连接断开时停用后台服务更新,或在电池电量较低时降低此类更新的频率。
根据需要操作广播接收器
监控设备状态变化的最简单方法就是,为您监控的每种状态创建
BroadcastReceiver并在应用清单中逐一进行注册。然后,您只需根据当前设备状态在每个接收器中重新安排重复提醒即可。
此方法的负面影响在于,只要系统触发了这些接收器中的任何一个,相关应用就会唤醒设备,其频率可能会远远超过所需的水平。
更好的方法是在运行时停用或启用广播接收器。这样的话,您就可以将自己在清单中声明的接收器用作被动提醒,只有在需要时才会由系统事件触发。
切换和层叠状态变化接收器以提高效率
您可以使用 PackageManager切换清单中定义的任意组件的启用状态(包括您要启用或停用的任意广播接收器),具体如以下片段所示:
ComponentName receiver = new ComponentName(context, myReceiver.class); PackageManager pm = context.getPackageManager(); pm.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP)
在使用此技巧时,如果您确定连接已断开,就可以停用除连接变化接收器外的所有接收器。相反,成功连接后,您就可以停止侦听连接变化,同时只需在执行更新和重新安排重复更新提醒前查看是否在线即可。
您可以使用同样的方法来延迟需要较高带宽的下载任务。只有在连接 Wi-Fi 后,您才能直接启用用于侦听连接变化和启动下载任务的广播接收器。
相关文章推荐
- 175.Which two statements are true regarding savepoints? (Choose two.)
- sink示例
- 第06篇 MyEclipse 2016 安装/破解
- 可展开的UITableViewCell
- 比特币学习 (1) 定义
- python pymongo-ensure_index
- 崔用志-微信开发-java版本
- 几何计算
- JTA jdbc处理 事务
- Java数据类型
- java书籍推荐
- mysql left( right ) join使用on 与where 筛选的差异。mysql的执行顺序
- phpstorm invalid descendent file name
- Android 使用Smack+openfire开发基于XMPP协议的聊天
- 数据库SQL SELECT查询的工作原理
- SHELL test [ 命令用法
- UB-AMP
- [powerDesigner]从数据库导出实体模型
- CocoaPods的安装使用
- iOS自己捕获异常定位错误代码