iOS CPU内存耗电量优化方案

4,881 阅读3分钟

缘由

APP最近在某些时刻触发了一些特殊的操作,导致APP温度持续增高,这个问题也困扰了我们许久,正好昨天测试的妹子又成功的触发了这个操作。于是便有了这一次的探究。首先我们可以思考APP烫手的原因可能有哪些?比如CPU、内存、定位、网络、音视频、动作传感器(比如陀螺仪)、蓝牙等。当然这就需要结合我们项目具体用了这些罗列的功能中的几种。

内存

内存泄露这一部分应该说我们最好定位的问题。

1.比如利用xcode的静态分析(虽然它不太准)。

2,利用Instruments中Leaks工具没写完一个功能跑一跑代码看看会不会有手残写错的地。

如何快速的定位问题

你也许会问这么多问题我得一个一个的去排查吗?有没有更简单的方式,嗯,有。 你需要用到的是:Energy Log这个功能

1,选择

2,选择连接的设备和你们项目的APP(only是我机子的名字,iosproject是我在github上看到的一个开源项目,简直TMD的特别强大)

3,将Time Profiler拖到左边来

4,点击红点进行调试,这时候你就可以看到这个画面
5,点击call tree中的Hide System Lbraries(隐藏掉系统),sperate by thread(根据线程进行分割)

6,如果你看不到具体这些函数的调用,你需要去xcode -Build Settings - Debug information Format - 修改DWARF with DSYM File

7,点击weight将耗时最长的线程排列到最前边选中它(也可以观察哪一个线程还在持续增长),到H额AVIE视图StackTrace中查看这个耗时的线程在干什么,双击其中一行的方法.我们就可以看到实际项目中哪一行代码可能存在问题。

8,这样我们就可以很快的定位具体哪个模块影响了我们整个的项目。 当然如果你想对Instruments想有更多的了解,你可以去看我另外一篇分享

同学,我这里有一个iOS面试的加分项,你要不要了解一下?

当然有人会问了我APP发热的时候可能手机并没有连着xcode,重新跑程序可能它就不复现了?

随时随地记录

如何做到随时随地记录我们认为可能会出现问题或者比较重要的log日志呢? CocoaLumberjack这个开源日志库是我们项目用到的管理我们重要的log日志工具。

1、支持日志打印到Xcode控制台,打印到mac的console程序、打印到文件 2、日志功能支持关闭和打开,支持Error、Warning、Info、Debug、Verbose、All日志等级

3、支持基于DDLogFormatter协议自定义日志格式和继承DDAbstractLogger和协议DDLogger自定义logger

4,结合我们项目的逻辑打包压缩日志文件上传。

这样我们可以检测哪些总是出现异常的用户他们当时在操作APP的哪些地方,又是什么触发了异常。当然这些影响我们APP的异常情况该怎么检测呢。

这个是我阅读了微信读书 iOS 质量保证及性能监控画的一个mindnode图总结了一下微信大概做了这么多事情。

Cover微信读书 iOS 质量保证及性能监控

补救只是最后的无奈

1.优化I/O访问

2.缩减网络请求

3.延迟联网

4.图像、动画、视频

5.优化定位和动作(Motion)

6.优化通知

......

这些操作有时间我会再开一篇专门具体如何做的文章。