一个iOS开发 用不可思议的代码使电量优化 (上)
在现如今的开发中, 电量消耗是一个应用运行效果的一个重要的衡量标准,尤其是直播,运动应用。 设备中的每个硬件模块都会消耗电量。电量的最大消费者是CPU,但这只是系统的一个方面。一个编写良好的应用需要谨慎地使用电能。用户往往会删除耗电量大的应用。 除CPU外,耗电量高、值得关注的硬件模块还包括网络硬件、蓝牙、GPS、麦克风、加速计、摄像头、扬声器和屏幕。 如何降低电量的消耗,是延长使用时间的关键。我们要关注以下:
判断电池的剩余电量及充电状态
如何分析电源
如何在 iOS 应用中分析电源, CPU 和资源的使用
- CPU
不论用户是否正在直接使用, CPU 都是应用所使用的主要硬件, 在后台操作和处理推送通知时, 应用仍然会消耗 CPU 资源。
image
应用计算的越多,消耗的电量越多.在完成相同的基本操作时, 老一代的设备会消耗更多的电量(换电池呀 哈哈哈 开个玩笑),计算量的消耗取决于不同的因素。
对数据的处理
待处理的数据大小----更大的显示屏允许软件在单个视图中展示更多的信息,但这也意味着要处理更多的数据
处理数据的算法和数据结构
执行更新的次数,尤其是在数据更新后,触发应用的状态或 UI 进行更新(应用收到的推送通知也会导致数据更新,如果此用户正在使用应用,你还需要更新 UI)
没有单一原则可以减少设备中的执行次数,很多规则都取决于操作的本质, 以下是一些可以在应用中投入使用的最佳实践.
针对不同的情况选择优化的算法
如果应用从服务器接受数据,尽量减少需要在客户端进行的处理
优化静态编译(ahead-of-time,AOT)处理 动态编译处理的缺点在于他会强制用户等待操作完成, 但是激进的 AOT 处理则会导致计算资源的浪费, 需要根据应用和设备选择精确定量的 AOT 处理.
2. 网络
智能的网络访问管理可以让应用响应的更快,并有助于延长电池寿命.在无法访问网络时,应该推迟后续的网络请求, 直到网络连接恢复为止。 此外,应避免在没有连接 WiFi 的情况下进行高宽带消耗的操作.比如视频流, 众所周知, 蜂窝无线系统(LTE,4G,3G等)对电量的消耗远远大于 WiFi信号, 根源在于 LTE 设备基于多输入,多输出技术,使用多个并发信号以维护两端的 LTE 链接,类似的,所有的蜂窝数据链接都会定期扫描以寻找更强的信号. 因此,我们需要:
在进行任何网络操作之前,先检查合适的网络连接是否可用
持续监视网络的可用性,并在链接状态发生变化时给与适当的反馈
官方提供了检查和监听网络状态的变化的代码,大多数人使用的网络库————AFNetWorking也提供了类似的代码,我们可以任选其一,亦或是自己编写(这段代码并不复杂)
- 定位管理器和 GPS
定位服务包括GPS(或GLONASS)和WIFI硬件以及蜂窝网络
原文中只写了前两种,而我们知道iOS的定位是有三种的
卫星定位
蜂窝基站定位
Wi-Fi定位(WIFI定位的故事和缘由很有的一讲,在后面会说)
我们都知道定位服务是很耗电的,使用 GPS 计算坐标需要确定两点信息:
时间锁
每个 GPS 卫星每毫秒广播唯一一个1023位随机数, 因而数据传播速率是1.024Mbit/s GPS 的接收芯片必须正确的与卫星的时间锁槽对齐
频率锁
GPS 接收器必须计算由接收器与卫星的相对运动导致的多普勒偏移带来的信号误差
计算坐标会不断的使用 CPU 和 GPS 的硬件资源,因此他们会迅速的消耗电池电量
先来看一下初始化CLLocationManager并高效接受地理位置更新的典型代码
.h文件
@interface LLLocationViewController :UIViewController
@property (nonatomic, strong)CLLocationManager *manager;
@end.m文件
@implementation LLLocationViewController(void)viewDidLoad {
[super viewDidLoad];
self.manager = [[CLLocationManager alloc]init];
self.manager.delegate = self;
}(void)enableLocati
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
