从开发者的角度分析iOS应如何省电

说明

网上关于iPhone如何省电的文章不少.可是基本没有讲原理.
而在生活中,不少人在使用iPhone中有着明显的错误的省电习惯.web

本文从iOS开发者的角度,对iOS的各项功能和技术进行说明,得出合理的省电技巧,以供你们参考.缓存

若是你对省电原理没有兴趣,请直接到文章最后,查看如何省电的方法.微信

哪些功能(硬件)是耗电大户

网络下载

wifi和4G都是耗电大户,可是要知道手机上的网络模块并非一直在高速工做状态.通常认为下载时耗电多,若是不是处于下载状态,耗电较少. 同时网络下载时也会伴随磁盘操做,高速读写也较耗电. iOS系统对硬件优化较好,当app退到后台,屏幕熄灭后,网络模块几乎不耗电.网络

定位

iOS上的定位与安卓不一样,综合包含:GPS,wifi辅助定位,蓝牙辅助定位.不能像安卓同样,单独关闭GPS,而后仍然能够用基站和wifi来粗略定位.
iOS系统会根据外部环境和app的定位请求精度,来综合使用多种定位手段.通常来讲,打开wifi和蓝牙,能够有效加速定位,从而达到省电的目的.app

定位精度对耗电影响极大:app能够指定定位的精度,从几千米到几十米,还有专门为导航准备的最高精度.随着app指定精度的提升,系统返回给app的位置精度和频率都会提升,耗电也会大幅增长.框架

拍照录像

拍照录像须要用到:相机捕捉画面+CPU/GPU处理数据+屏幕显示画面+磁盘读写,所以是很耗电的操做.尤为是当前新系统提供高清/高速视频录制功能,更是耗电大户.
更须要注意的是,如今不少美颜相机优化很差,大量特效的图像处理任务放在CPU执行,耗电严重.优化

视频播放

和拍照录像相比,视频播放用到的硬件也很多,尤为是在线观看视频时:网络下载+CPU/GPU处理数据+屏幕显示画面+磁盘读写,也比较耗电.动画

如今视频播放方面技术较为成熟,大部分状况下app能够直接使用iOS自带的视频框架,即使使用开源组件自定义播放器,大部分也可使用GPU加速解码播放. 若是发现某个播放器在播放时发热严重,多是由于使用了CPU编解码,建议更换其余软件.人工智能

屏幕高亮

在强光下使用手机,屏幕会自动变亮, 除此以外,在拍照录像和展现二维码时,也会有屏幕高亮状况,耗电会有所增长.设计

复杂动画

有些复杂动画,可能会有大量的计算,有些可能会截屏并获取截图上的内容,有些可能会绘制生成大量图像.若是不加优化,会比较耗电.

可是通常状况下,app中不会有过多的动画,也不会过于复杂,iOS上对于大部分常见动画支持很好,耗电极少.

蓝牙

蓝牙能够大概分为:传统蓝牙和低功耗蓝牙(BLE).
蓝牙音箱,蓝牙耳机,蓝牙助听器等用的是传统蓝牙,耗电相对较多;而手环,手表等使用的是低功耗蓝牙,耗电量极少.

怎么判断呢?由于iOS上,传统蓝牙是不容许开发者操做的,使用蓝牙音箱时,咱们只须要进入系统设置界面--搜索链接就可使用了;而那些使用app来配对链接并能够用app控制的,就是BLE,开发者可使用CoreBluetooth框架来控制低功耗蓝牙的.

通常来讲,无论是传统蓝牙,仍是低功耗蓝牙,相比其它硬件来讲耗电并不大,尤为是低功耗蓝牙,能够认为几乎不耗电.

AR/3D游戏

AR和3D涉及大量计算和图形显示任务,并且还颇有可能须要网络支持,时刻保持链接,还有磁盘读写,耗电量极大.

苹果对此的规定和限制

iOS11开始,在上拉界面的快捷菜单中关闭蓝牙和wifi时,并非真正的关闭,只是断开了链接而已,而且会在第二天早上6点自动打开.而苹果自家的apple watch和iPad配套的笔并不会断开链接,AirDrop(隔空投送)也能够继续使用.基于蓝牙和wifi的辅助定位也可使用.

若是想真正关闭,要进入设置中,关闭蓝牙和wifi,才是真正的关闭,芯片段电,系统蓝牙和wifi缓存清理.

苹果之因此这样设计,正是由于对系统掌握能力强,优化到位.所以推荐你们,平时不要关闭蓝牙和wifi,根本省不了多少电,反而在定位时增长了耗电.

前台机制

按照苹果的要求,一个app在完成相应操做后,应该及时释放或中止对硬件或系统功能的控制.好比,一个app(好比:饿了么)须要根据不一样城市显示不一样首页内容,那么应该在获取到手机的当前城市后,主动中止定位.

同时,苹果还建议:

  • 若是一项操做不肯定何时须要,则尽可能考虑延后执行或者省去;
  • 能使用单次定位,就不要使用持续定位(极其耗电).拿到知足要求的数据后当即中止;
  • 尽可能避免使用定时器不断更新数据,而要在用户操做时或先后台切换时再刷新数据;若是必需要使用定时器,尽可能使用长间隔,并设定暂停条件;
  • 多使用缓存机制,出错时重试次数应设置限制;

后台机制

iOS系统的后台共有三种:

  • Background Tasks(后台任务):APP 在前台时启动某项任务,而后在未结束以前忽然切换到了后台,那么 APP 能够在切换回调里使用某些 API 来继续向系统请求一些时间来继续完成这个任务;完成以后通知系统,以后系统会将 APP 挂起;
  • Downloading(下载):在后台启动从网络下载文件的任务 – 对于文件下载,iOS 有专门的机制;
  • Specific Backgournd Tasks(特殊后台任务):应用须要在后台一直执行代码,长时间运行;

先说第一种后台任务,其实就是一个app刚退到后台时,能够向系统申请一段时间(通常几十秒)来处理一些任务,等任务处理完成再被系统挂起.好比一个地图软件,下载离线地图后,正在安装,用户此时按了Home键,那就能够向系统申请一段时间等安装完成后,再挂起.若是耗时超过系统限制,会被强制清理.

第二种后台下载,必须使用 iOS 指定的机制才能够,那就是 NSURLSession来建立后台下载.即便你的app已经进入后台,或被系统杀掉了,当下载完成时,系统会唤醒app来处理下载好的文件.不少杂志类应用会有这种功能.

第三种特殊后台状况就比较多了:

  • 须要在后台播放音频 – 如音乐播放;会一直运行

  • 须要在后台录音;会一直运行

  • 在后台时也须要不断通知用户位置变更的; 好比导航app会一直后台运行, 但地理围栏app只会在进入和退出指定位置时唤醒app;

  • 支持 VoIP 电话的 – 如 skype 网络电话;会在有电话时被系统唤醒

  • 须要在后台有规律的下载和处理网络内容的;会在指定时间或网络条件下被系统唤醒

  • 在后台有规律的从其余外设(第三方配件)获取并更新数据的;会在收到配件消息时被系统唤醒

后台唤醒注意事项

还须要注意的是,那些被系统后台唤醒的app并非无限制的,大部分状况下被唤醒后只有10秒时间来处理任务,超时未完成处理会被系统强制挂起.

iOS为了控制后台任务,使用了AI技术,依靠人工智能来判断一个app应不该该被唤醒,唤醒频率是多少.已经不是你的app想要唤醒就能唤醒的了,若是手机电量不足或者被唤醒后你的app没有联网存取一些数据,或者老是超时被强制结束,那就不会再被唤醒.

还须要注意的是, 绝大多数状况下,系统不会重启被用户手动强制关闭的 APP,但在 iOS 8 以后, location apps (地理围栏等)是个例外。其余的全部被用户手动强制关闭的APP 都不会被系统主动唤起,直到用户再次主动启动这个 APP,或者手机重启并在用户输入了解锁密码以后才会恢复机制。

上架审核

苹果对后台功能要求很严格,要求开发能不用后台就不要用.

若是必定要用后台功能,须要给出说明和解释,让审核人员清楚地知道,app的哪一个功能用到了后台模式.尤为是后台定位功能,由于涉及用户隐私,审核很是严格.

经常使用软件是怎么作的

绝大部分软件是遵照苹果开发规范的,可是仍是有一些app因为设计不良或出现bug,致使耗电量很大:

  • 常见的是在进入后台时,或在前台但屏幕熄灭时,未能及时中止某些耗电操做(好比下载和定位),致使耗电.
  • app为了追求动态化使用了大量web技术,也会致使耗电增大.好比淘宝app,就有明显的运行卡顿,耗电过多的状况.
  • 后台存取(后台应用刷新)过于频繁,耗电增大.
    好比在系统设置界面,能够看到微信有个后台应用刷新开关,若是打开这个开关,那么微信在收到新消息推送后,在后台就能够更新消息,直接打开微信就能看到了;若是关闭这个开关,收到新消息后,能够在推送栏看到消息,但打开微信后还须要联网从新下载完整消息.

另外还有一些软件,故意钻空子,利用技术手段做弊,强行运行在后台,达到某些目的.尤为在iOS10以前的系统上很常见.

后台做弊

  • 因为iOS后台机制的限制,之前要想在后台运行,能够申请后台权限后,模仿音乐播放器,在后台循环播放一段无声的音乐,这样就能够一直运行在后台,直到内存不足被系统杀死.
  • 利用后台存取(后台应用刷新)功能,正常状况下,声明了这个类型以后,系统在你的 APP 进入后台后,间隔性的给机会将你的 APP 唤醒,唤醒后再经过beginBackgroundTaskWithExpirationHandler:向系统申请一段时间,而后再重复申请一段时间,就能够长时间在后台运行.并且被杀死后还有可能被系统从新唤醒.

可是,如今iOS10和iOS11以后,这些方法也很难骗过审核人员和iOS系统的后台唤醒机制了.

普通用户该怎么省电

前面讲了不少,都是做为开发者在长期开发中总结的经验,还有阅读苹果相关文档获得的知识.

但对于普通用户来讲,到底该怎么省电呢? 我根据上面的原理,结合本身使用iOS系统的经验,总结了下面几条:

常常查看耗电状况

在手机的设置—电池,页面中,能够看到过去24小时和过去7天的电池消耗状况,点击右侧的时钟按钮,还能够更详细的显示各个app的前台运行时间和后台运行时间.

对于某些后台运行时间明显异常的应用,应该尝试关闭权限或直接杀死,以免在后台长时间运行耗电.

好比我就遇到过,某个手环app在一次更新后,定位功能未及时关闭,一直在后台运行并不判定位,一夜耗电70%.经过改变定位权限来限制后台耗电.

关闭没必要要权限

这里的权限主要指三个:一个是定位权限,能只给使用时定位权限,就尽可能不给始终定位权限,固然,对于导航应用来讲,若是不给始终定位权限的话,就没法在后台语音导航了;

另外一个是后台应用刷新,这个权限不会提示,须要本身在应用安装后手动关闭.对于微信之类的经常使用app能够保留,不经常使用的建议关闭.关闭这个权限并不影响收取通知.

还有一个是通知的权限,有通知就会反复唤醒手机,当app同时有后台应用刷新权限时,还有可能被通知唤醒,在后台启动.

下降屏幕亮度

适当下降屏幕亮度能够省电,这个彷佛没有什么须要解释的.

禁用抬起唤醒等系统功能

仍是在设置—电池,页面中,能够禁用这个功能,这样手机就不会由于随便翻动手机而亮屏了,须要点亮屏幕时能够手动按Home键点亮.但对于iPhoneX就不适用了.还能够缩短屏幕锁定的时间,好比改成30秒.

还能够根据本身的须要,禁用系统更新,iCloud同步,siri唤醒等.

但若是你不想永久禁用这些功能,只想在外出旅途中尽量节省电量,那能够启用低电量模式.

启用低电量模式

iPhone默认在电量只有20%时进入低电量模式,可是咱们也能够手动进入低电量模式来延长续航.

进入低电量模式后:
屏幕锁定时间强制改成30秒;
屏幕亮度稍微下降;
应用后台唤醒频率大大下降;
网络和蓝牙模块扫瞄频率,链接速度等都会下降;
CPU运行频率下降;
系统动画效果减弱;
定位频率下降;
自动禁用软件更新和iCloud同步;
禁用siri语音唤醒...

一套组合拳下来,省电效果十分突出.适用于忽然须要外出一成天,却没有带充电宝的状况.

慎重使用杀进程

前面说到,手动杀死进程后,通常状况下系统不会再唤醒了,因此杀死一些应用能够省电.

可是有些应用是须要常常启动的,好比微信,一天可能须要看上百次,若是反复杀死上百次,再反复从新启动上百次,耗电只会更多.

慎重关闭蓝牙和wifi

正常状况下,在待机时,蓝牙和wifi耗电极少,但在定位时却能够有效加速定位.极端状况下须要省电,也应该使用低电量模式,这样省电最明显.除非肯定本身不须要蓝牙和wifi功能,也不须要使用定位功能(也没有应用在后台定位或使用地理围栏),那么再考虑关闭.

总结

在明白了iOS系统的前台后台原理后,咱们就能够知道,在平时生活中,咱们只须要常常查看耗电状况关闭没必要要权限这两招,就能够很好的控制iOS的耗电状况.

必要时再加上启用低电量模式,并尽量少使用那些重度依赖网络,定位,相机,视频功能的app就能够了.

若是还不能知足你的要求,只能随身带充电宝或者等之后苹果更新大容量电池的iPhone了.

相关文章
相关标签/搜索