iOS 电池消耗Tips

看了一下苹果关于电池消耗的文档,可是说是一些tips,将tips翻译出来,给自己看看。

1. CPU 

 1. 减少使用polling 轮询? 

 2. 避免取消屏幕一直亮着的情况。

 3. 合并工作,减少CPU的一直做小的工作 ?? 不太明白 - 避免频繁的访问硬件 

 4. 重绘视图的频率不要过快 - 如果用了accelerometer,同一个区块就不要再使用事件。只需要按需加上event事件。

2. WIFI 蓝牙 3g、4g

传输的网络数据越多,就需要耗费更多的电量。执行网络交互是耗电最密集的操作。我们在编写代码遵循以下方式来减少网络过程中的电量消耗。 

1. 只有在需要时链接额外的网络服务;不要不停的尝试连接这些服务。  

2. 当必须要网络连接时,避免传递不需要的数据内容。  

3. 快速发送数据,而不是慢慢发送数据,更短的时间内发送同一个数据包比长时间发送相同内容的数据包更节省电。   

 4. 使用NSURLSession类时,将上传任务和下载任务排序,(不要等一个任务完成再开始下一个任务),系统会对自动进行优化操作。    

 5. 尽量使用WIFI来使用网络,使用更小的电量,它的优先级高于使用蜂窝无线网络。   

 6. 如果你使用Core Location framework来收集位置信息,尽快禁用位置更新,并把距离过滤器和精度级别设置到适当的值。      

 注:可以通过使用Instruments来查看App的状态。

3. 定位    

4. 加速器?

 5. 硬盘

有效的使用存储空间鼓励使用更小的内存,所以可以在后台保持更多的APP。系统拥有更小的内存空间,更容易出现内存问题。为确定一直有足够的内存空间可以使用,应该最小化APP的内存使用,并且可以对系统提出的需要释放内存的需求作出响应

观察低内存的警告

如果系统配发低内存警告,对其马上进行处理,低电量的警告是一个可以让你消除不需要的对内存空间的机会。忽略这些警告会使app终止。系统提供一下几种API方便你处理低内存问题。

1. applicationDidReceiveMemoryWarning AppDelegate

2. didReceiveMemoryWarning  ControllerView

3. UIApplicationDidReceiveMemoryWarningNotification notification-  DISPATCH_SOURCE_TYPE_MEMORYPRESSURE.  这部分相关的文献没看过,dispath_source的内容估计下周才会看。

接收到警告信息应该马上释放不需要的内存空间(什么是不需要的内存空间)。使用警告来清除缓存和释放图片。如果有大的数据结构还未被使用,将这些数据存放在disk中,然后在删除堆中的数据。如果数据模型中包含可清除的资源,可以使用通知的方式来清除强指针。

>可以使用模拟器的Memory Warning来测试App对内存处理的行为。

减少App的内存占用下面是一些tips来减少内存占用。

1. 清除内存泄露

2. 使资源文件尽可能地小

3. 使用CoreData 或者 Sqlite来存储大的数据- 用懒加载的方式加载资源#### 合理的分配内存下面是一些提高内存使用的tips

4. 对资源大小进行限制。(啥意思??)

5. 避免不受控制的问题集。会导致处理问题集的大小未知。如果问题集的处理内存的大小超过了App的内存空间,会导致处理异常。

优化网络代码 

iOS网络堆栈包含与设备硬件相连接的接口,其主要接口是CFNetwork framework,它是建立在BSD和 Core Foundation framework 的网络层实例。还可以使用NSStream类 和 low-level BSD sockets。 发送和接收网络数据是设备最消耗电量的操作之一。最小化传递和接收数据的时间可以帮助提升电池寿命。为满足这个问题,可以使用以下的方式:

1. 定义数据格式越紧凑越好?

2. 避免使用非正式协议。

3/ 任何时候都快速发送数据包。

当程序不活动的时候,蜂窝网络和WIFI被设计为关闭。虽然使用无线广播会花费几秒事件。如果你的app每隔几秒发送一次数据,无线广播会一直开着,即使它并没有做任何事,它也会并消耗电量。所以更适合一次传递大量的数据或者每隔一定间隔发送数据。当和网络沟通的时候,数据包可能随时丢失。因此当写网络代码时,需要使网络代码足够健壮保证能对错误进行处理。应该合适的响应各种网络情况,但是也会出现处理不一致的情况。

使用WIFI

如果你的APP允许接入网络,必须在Info.plist中进行定义,包含 UIRequiresPersistentWiFi。它可以让系统不要在APP运行阶段关闭无线网络硬件。

为防止无线网络硬件消耗太多电量,iOS系统会在没有APP需要使用UIRequiresPersistentWiFi之后的30mins关闭网络硬件。如果APP的运行使用了UIRequiresPersistentWiFi,在APP的生命周期中系统会有效的持续时间计时器。

飞行模式提醒

如果APP在设备处于飞行模式的时候启动,系统可能会通知APP这个事件。系统只会在满足以下所有条件才会对前台进行通知。

1. App中设置了UIRequiresPersistentWiFi并且值为true。

2. APP启动时,系统处于飞行模式。

3. 在设置成飞行模式后,设备的WIFI不能正常的手动切换。

提高文件管理

减少数据写入沙盒中文件的操作是相对缓慢的,涉及到将内容写到寿命有限的闪存驱动器中。下面帮助减少文件操作的tips。

1. 只编写更改的文件的部分,并在可以的时候进行聚合更改,避免写了整个文件只修改几个bite的操作。

2. 在定义文件格式时,以组的方式进行修改,以最小化每次需要写入disk的块的总数。

3. 如果数据包含随机访问的结构化内容,使用CoreData或者Sqlite,特别是在一些大的数据条件下。避免将缓存文件写入磁盘。只有在APP退出,但是需要将此次的数据状态保存,使下一次启动时有相同的状态。

使应用程序备份更加有效

备份可以通过iCloud无线传输或者通过iTunes同步备份。过程中,文件将转移到电脑或者iCloud账号。沙盒数据决定了是否恢复、备份数据。如果您的应用程序创建了许多大型文件,这些文件经常发生变化,并将它们放到一个备份的位置,结果可能会减慢备份速度。

把工作从主线程移走

确认只有有限类型的工作可以在主线程中完成。主线程是用户事件处理和其他输入的地方。为确保能够又一个良好的交互,不应该在主线程中放入需要花费大量时间去处理的任务。比如网络。应该总是将这些任务放在线程中执行。GCD和NSOperation是很好的处理异步任务的方式。

将任务移至后台可以使主线程处于空闲状态,在APP开始或者退出时,需要在短时间内响应用户行为。如果主线程在启动阶段堵塞,在结束启动之前,系统会杀死APP。如果主线程在APP退出的阶段堵塞,可能会在写入缓存前杀死APP。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,226评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,678评论 18 139
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,154评论 30 470
  • 今天的研修班课上,文丽老师抛出一个问题:“在你们眼中,什么是幸福?” 这样一个看似“毒鸡汤”的命题,在这里被提出来...
    思小圆阅读 501评论 2 3
  • 岛村说他来到界县,对这里的美好感觉是因为在开始的时候遇到的那个人。我在想,大概我也是一样的。因为开始的不可...
    恋心要开心鸭阅读 213评论 0 2