原地址:http://blog.csdn.net/newjerryj/article/details/6319427
iOS的电能管理系统保持电能的方法是关闭当前未被使用的硬件功能。应用程序可以通过以下组件来达到省电的目的:
■ CPU
■ Wi-Fi和基带(EDGE, 3G)无线信号
■ Core Location框架
■ 加速计
■ 磁盘
您的优化目标应该是以尽可能有效的方式完成大多数的工作。您应该总是采用 Instruments和Shark工具对应用程序的算法进行优化。但是,很重要的一点 是,即使最优化的算法也可能对设备的电池寿命造成负面的影响。因此,在写 代码的时候应该考虑如下的原则:
■ 避免需要轮询的工作,因为轮询会阻止CPU进入休眠状态。您可以通过 NSRunLoop或者NSTimer类来规划需要做的工作,而不是使用轮询。
■ 尽一切可能使共享的UIApplication对象的idleTimerDisabled 属性值保持为NO。当设备处于不活动状态一段时间后,空闲定时器会关 闭设备的屏幕。如果您的应用程序不需要设备屏幕保持打开状态,就让 系统将它关闭。如果关闭屏幕给您的应用程序的体验带来负面影响,则 需要通过修改代码来消除那些影响,而不是不必要地关闭空闲定时器。
■ 尽可能将任务合并在一起,以便使空闲时间最大化。每隔一段时间就间 歇性地执行部分任务比一次性完成相同数量的所有任务开销更多的电 能。间歇性地执行任务会阻止系统在更长时间内无法关闭硬件。
■ 避免过度访问磁盘。举例来说,如果您需要将状态信息保存在磁盘上, 则仅当该状态信息发生变化时才进行保存,或者尽可能将状态变化合并 保存,以避免短时间频繁进行磁盘写入操作。
■ 不要使屏幕描画速度比实际需求更快。从电能消耗的角度看,描画的开 销很大。不要依赖硬件来压制应用程序的帧率,而是应该根据程序实际 需要的帧率来进行帧的描画。
■ 尽可能快地以群发(in burst)方式传递数据包,而不是拉长数据传输的 时间。当系统检测到设备没有活动时,就会关闭Wi-Fi和蜂窝无线信号。 您的应用程序以较长时间传输数据比以较短时间传输同样数量的数据要 消耗更多的电能。
■ 尽可能通过Wi-Fi无线信号连接网络。Wi-Fi耗电比基带无线少,是推荐 的方式。
■ 如果您通过Core Location框架收集位置数据,则请尽可能快地禁止位置 更新,以及将位置过滤器和精度水平设置为恰当的值。Core Location通 过可用的GPS、蜂窝、和Wi-Fi网络来确定用户的位置。虽然Core Location已经努力使无线信号的使用最小化了,但是,设置恰当的精度 和过滤器的值可以使Core Location在不需要位置服务的时候完全关闭硬 件。更多信息请参见“获取用户的当前位置”部分。