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

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

说明

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

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

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

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

网络下载

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

定位

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

定位精度对耗电影响极大: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了.

来自 掘金 作者 :史前图腾  源链接:https://juejin.im/post/5afd82f15188254270642ff0

2018 年 05 月 17 日

原文地址:https://www.cnblogs.com/tangyuanby2/p/9070976.html

时间: 2024-10-09 20:07:02

从开发者的角度分析iOS应如何省电的相关文章

从技术的角度分析我们到底需要什么样的CRM

尽管我们仍然对大数据以及所谓的"数字化决策"怀有戒心,但是我们对CRM的热情依然不减.在"营销即价值交换"的共识下,客户关系管理是数字营销的起点和终点,也是粉丝经济.体验经济等"新经济"的战略支点和实现平台.    上世纪80年代初,由Oracle.Siebel 带领的软件公司开创了CRM行业,把电讯科技带入了传统销售.90年代末,Salesforce.com在1999年第一次将CRM带入了云,用户通过浏览器即可使用.当年贝恩咨询的三位大牛 Da

一个可以实时跟踪分析iOS App视图的小工具

一个可以实时跟踪分析iOS App视图的小工具(已开源) GitHub入口:https://github.com/sx1989827/RunTrace 前言 作为iOS的开发者,常常为了UI界面搞得头破血流,你是不是经常遇到这样的痛点:这个view是从哪里来的,它的父视图是什么,它的子视图有哪些,它的frame会发生什么样的变化,它怎么突然隐藏了,它什么时候会被释放掉,对于像自动布局,错误常常如潮水般的涌来,我想动态获取一个view的约束怎么办,我想知道这个view此时此刻和其他哪些view产生

Reveal:分析iOS UI的利器

转:http://security.ios-wiki.com/issue-3-4/ Reveal简介 Reveal是分析iOS应用UI的利器: Reveal能够在运行时调试和修改iOS应用程序.它能连接到应用程序,并允许开发者编辑各种用户界面参数,这反过来会立即反应在程序的UI上.就像用FireBug调试HTML页面一样,在不需要重写代码.重新构建和重新部署应用程序的情况下就能够调试和修改iOS用户界面.--InfoQ Reveal运行在Mac上,目前的最新版本是1.0.4,可以从这里下载,要求

转 理解与分析ios应用的崩溃报告

理解与分析ios应用的崩溃报告 源网址: http://developer.apple.com/library/ios/#technotes/tn2151/_index.html 当一个应用程序崩溃时,创建一份“崩溃报告”对于理解崩溃是如何引起的非常有用.本文档包含有关如何识别,了解并解释崩溃报告的基本信息. 简介 当一个应用程序在一台iOS 设备上崩溃时,一份“崩溃报告”将在该设备上次创建并存储起来.崩溃报告描述应用程序是在何种条件下崩溃的,大部分情况下包含一份当前正在运行线程的完整的堆栈跟踪

从程序员的角度分析微信小程序

昨天朋友圈被微信小程序刷爆了. 我赶快在书架上拿出三年前买的书,把上面的土擦干净,压压惊. 作为一个并不是资深的程序员. 从程序员的角度分析一下微信小程序,欢迎指点. 首先吐槽 微信小程序只发了200个邀请号,和我预想的一样,张小龙并没有翻我牌,难道就不能雨露均沾吗? 先来了解下什么是微信小程序. 转自知乎 微信也许重申了"我们是一款约炮软件" 微信还提供了一大堆接口和组件(不好意思,说了句废话). 下面是禅叔的观点: 小程序原理就是用JS调用底层native组件,和React Nat

Reveal分析IOS界面,plist文件读取

Reveal分析IOS界面,需要得到app的 softwareVersionBundleId上传到iphone中 , 而IOS8的iTunesMetadata.plist 去Downloads里面查找很费劲 ,所以写了个辅助脚本,一次性全部读取出来 主要使用python,实现遍历文件夹获取文件列表,然后读取字段,输出成文件libReveal.plist格式 python读取plist文件的库 来自https://github.com/wooster/biplist/ 1 path = '/Use

从一个开发者的角度评价编程语言

这其实是一个比较老的话题了,关于各种语言的好坏选择网上怎么说的都有,有趣的是所有的争论占据伤风的总是一些脑残粉,对于编程语言的选择不同的人有不同的看法,我大致分为以下几类: 1.搞开发的 2.搞教育的 3.搞科研/学术的 4.业余的 5.其它 我是做开发的,这篇文章主要是从开发者的角度,根据多年来各种语言的使用经验来谈谈主流的编程语言,这些语言包括(C.C++.D.Go.Java.C#.Delphi.VB.PHP.Python),没有列出的语言表示我没用过,所以也不好评价. 我认为一个好的编程语

从开发者的角度解释网上看视频出现的各种问题

本文从开发者的角度给大家用通俗的语言来解释一下有关音视频播放的问题. 1. 为什么在视频网站上播放1080P视频有时候不是特别清晰? 1080P代表视频的分辨率是1920x1080,对于图像而言,分辨率越高,清晰度也越高:但是视频不同,视频是由多帧图像组成的,为了减少存储空间.便于传播,视频中的图像都是经过了一定的算法压缩,而压缩则必然导致失真. 在视频压缩算法中,有一个衡量压缩比率的参数,叫做:码率.它代表一秒钟的视频数据大小,例如:10Mb/s,代表1秒钟有10M bit的视频数据,对于YU

从源码角度分析Android View的绘制机制(一)

在Android的学习道路上,每一个人员都免不了去翻阅Android的源码,因为只有从源码的角度分析问题,我们才能真正的玩转Android开发.最近由于工作比较闲,总想着想写点什么东西,正好自己也可以整理一下.考虑到view的显示机制是自定义view的基础,也是面试中经常被问到的问题,所以记录此文,和大家共享,因水平有限,望大家踊跃拍砖,不胜感激. 有过自定义view的同行们都应该知道,view的显示依托于activity的setContentView方法依附到PhoneWindow窗体上的,在