该文是 Tuning for Performance and Responsiveness (http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Performance/Performance.html#//apple_ref/doc/uid/TP40007072-CH8-SW56)的部分阅读笔记。
1. 首先,移动设备的耗电大户主要是下面几大方面。
The CPU.
Wi-Fi, Bluetooth, and baseband (EDGE, 3G) radios WIFI 网络链接、蓝牙、基带射频(连接电信运营商的移动网络)
The Core Location framework (GPS ,GPSONE等其他位置服务框架)
The accelerometers(重力感应器?)
The disk(磁盘访问)
2.非网络相关的省电指南
2.1避免以轮询的方式完成某种工作,轮询将使CPU不能进入睡眠状态。引起电量的长时间消耗。
2.2尽量避免关掉系统的自动休眠时钟,这一点在之前的文章中有提到过
“.自动休眠时钟,为了省电的原因,当IOS系统检测到最近没有手势事件触发的时候,会开始将设备的屏幕亮度调底,如果还无手势事件触发,系统将彻底关闭屏 幕的电源。如果开发者开发一个IOS应用,长时间不依赖于手势事件,例如,例如利用重力感应器的游戏或者是视频类应用,可能需要关闭该自动休眠时钟,当 然,出于省电考虑,应用应当尽量尽量不使用和少用该功能。”
方法是Leave the idleTimerDisabled
property of the shared UIApplication
object set to NO
whenever possible
2.3合并工作碎片成一个比较大的任务,是CPU具有成片的空闲时间。工作碎片太多,会导致CPU频频被唤醒,并切换工作状态去执行细碎的工作任务,不利于省电。例如,在系统设计中,联系人用户数据可以一条条读入(符合自然的思维习惯),也可以一批读入集中处理,应当尽量使用批量处理逻辑。
2.4避免频繁读写磁盘(存储),例如一个读写磁盘操作,由大量小更改操作组成,可以优化合并成一次磁盘读写操作,更新所有的数据。
2.5避免盲目追求更快的屏幕绘制刷新速度,屏幕绘制是非常耗电的操作,避免盲目追求高速的帧刷新频率。
2.6减少设备上的事件传输。IOS上存在着三种事件,第一类是触摸屏事件,第二类是移动设备产生的事件(Motion Event),例如摇动设备产生的事件,持续的长时间获取设备的位置或者陀螺仪事件等,第三类事件是远程控制事件,由耳机等外部设备产生的对应用的控制事件,例如,播放音乐时候应用会收到暂停或者快进等事件。基于节电的考虑,请应用禁止事件的传送或者降低事件的传送频率。例如,如果应用使用UIAccelerometer
接收事件,可以设置接收 加速事件(acceleration events)的频率。
3.网络相关的省电指南
3.1尽量减少非必要的网络连接操作,不要对网络中的服务器进行轮询。
3.2非连接网络不可的时候,只传输最少量的数据,使用压缩格式,并清除将被忽略的无意义数据。
3.3优先采用批量传输打包数据,尽量不要周期性传送少量的数据。当系统发现网络处在非活动状态时候,会发送命令使WIFI或者蜂窝无线基带模块进入休眠状态,从而达到省电的目的。
3.4能够使用WIFI的时候优先使用WIFI网络,文章说WIFI连接相对蜂窝无线网络连接更加省电(为何?)
3.5尽量节省使用核心位置框架( Core Location framework)来获取设备位置更新。因为核心位置框架需要使用各种网络连接,例如WIFI, 蜂窝无线电、GPS等来获取设备的位置更新,这些模块都是耗电的大户。