一、Ios获取方法

Instrument电量工具获取

操作步骤:

a) 手机不能连接数据线,kill掉后台所有app进程

b) 点击设置,选择开发,点击Logging,开启Energy,点击Start Recording

c) 打开被测app,进入你想要检查耗电量的页面,操作一段时间

d) 操作一段时间以后,回到设置里刚才Logging的地方,点击Stop Recording

e) Mac电脑打开xcode,刚才测试的手机数据线连接mac电脑,xcode选择刚才的手机

f) xcode点击Product,选择profile,打开instrument,选择Energy Log,打开

g) 再点击File,选择Import Logged Data from Device,进入分析

2. 测试结果:(电脑悦选app为例)

图一:

图二:

a) 操作的页面包括心愿单列表页、常购列表页、推荐列表页,最后是商品详情页

b) 见图一,第一行是耗电量,Energy Usage Level的值(0 -- 20),值越大表示越耗电,第二行是cpu占用情况,左上角是真机名和对应的app,由图一得知,CPU占用大,耗电量就高

c) 见图二,那段时间我都是在操作商品详情页,从图中结果看出,那段时间耗电量是连续性的在高位,值是17以上。对应CPU占用也在持续上升。

d) 从测试结果确认,悦选app耗电量较大的页面在于商品详情页。到此为止,该工具只能结合自己的测试情况,定位到出问题的页面。

二、小结

电量测试,不允许测试时连数据线充电,不然测试结果无意义。

三、测试方法分析

深入探究ios电量测试方法的可行性。

疑问1:

为什么能够确认获取的电量数据,就是我当时操作的app的电量?有可能是其他app后台的进程或者系统的进程导致的耗电?

解答:

1. iOS 系统有个机制,就是除了音视频类的app,后台30秒内就会处于休眠。所以其他应用的耗电此时可以忽略。

2. 测试人员测试时,把其他在后台的app都kill掉,保证只有被测app运行。

疑问2:

为什么开发者记录的那段log就是当时点击start到stop过程中的那段时间,不会有其他时间段的数据log干扰?

解答:

系统log就是记录这段时间的,没有为什么,下次再点start又会是记录新的日志,所以Import到instrument工具的log就是测试那段时间的log。

四、测试结果分析(扩展了解)

上面测试方法只能帮我们定位到具体页面,但至于为什么这个页面会耗电,得开发人员从代码上分析。

参考:https://www.jianshu.com/p/4555704f9696耗电量优化部分。该文章已经把引起耗电的几个常见原因列出来了。

结合到我们悦选app的耗电分析,咨询开发,商品详情页耗电的原因如下:

1、商品详情页频繁使用了NSDateFormatter

2、全局刷新的地方很多

3、使用圆角的地方很多

4、整个项目全部使用了xib

上述原因导致商品详情页耗电特别明显(就是用户感觉到手机发烫的原因),计算历史价格那里,进行了大量循环运算

五、耗电的原理(扩展了解)

结合上面悦选app的耗电原因,我们接着分析,为什么上述原因就导致耗电了?从原理上分析:

参考:https://www.jianshu.com/p/9a5e94e7b7c3

1. 当app更新UI、执行网络/蓝牙/定位操作或者在CPU中运行代码时,都会消耗电能。CPU使用量越大,功率越大,电能消耗越多,电池消耗也就越快。app消耗的硬件资源的越多,系统工作越繁重,设备的温度就会逐渐上升。

2. 结合商品详情页的耗电原因,再分别说明:

(1) CPU,CPU是电能消耗大户,高CPU使用量会迅速消耗掉用户的电池电量。——商品详情页的价格趋势计算,因为价格趋势要显示360天的数据,而接口可能只给了10天的数据,这时候需要根据10天的数据去填充360天数据。这里算法复杂,导致cpu处理内容过多,使用率就越大了。

(2) 图像、图片,app内容每次更新到屏幕上都需要消耗电能处理像素信息。动画和视频格外耗电。不经意的或者不必要的内容更新同样会消耗电能,所以UI不可见时,应该避免更新其内容。——商品详情页里面有大量的圆角处理。这里涉及GPU,离屏渲染这个概念:手机上,把UI显示出来是通过手机的GPU渲染显示到屏幕上的,圆角设置会导致GPU在当前新开个线程处理圆角,就是离屏渲染。悦选app的设计稿虽然画的是圆角,但没有直接给圆角图片,商品详情页里面所有的圆角效果都是代码计算实现的。显而易见,优化的空间就是:设计直接给圆角图片好了,这样能大量减少实现圆角的计算。

3. 综上所述,第四大点导致耗电的4个原因,并不仅仅出现再商品详情页,其实其他页面也有类似的情况,只不过是商品详情页的价格趋势计算导致耗电特别明显而已。再举个例子:推荐页心愿单页双排列表页频繁滚动也耗电,耗电跟UI的复杂性和代码的逻辑也有很大的关系。再比如嵌套好几层for循环处理很复杂的逻辑不断调用,这样也会很耗电呢。所以解决耗电问题也不像解决某个bug那么容易,是一个全局的系统性的工作。

六、结论(对测试有帮助的)

通过上面的分析,对测试的收获,测试可掌握的内容?

1. 掌握耗电量测试方法,能定位到耗电的页面。

2. App性能,cpu使用率和耗电量这两个概念基本上成正比关系,哪个地方cpu耗用高,那个地方的耗电量也会比较大。

3. 了解该app重点功能的实现,是否运用到复杂的计算或代码逻辑处理,导致cpu处理过多。

4. 了解该app的圆角UI的实现,是代码计算实现还是设计直接给圆角图片。

5. 了解该app页面是原生代码实现还是直接调web页。

6. 了解该app哪些地方需要实时显示,实时显示意味着需要刷新状态或频繁请求接口获取最新状态,刷新过多也会导致耗电。

iOS电量获取的更多相关文章

  1. iOS 直播-获取音频(视频)数据

    iOS 直播-获取音频(视频)数据 // // ViewController.m // capture-test // // Created by caoxu on 16/6/3. // Copyri ...

  2. iOS如何获取网络图片(二)

    ios如何获取图片(二)无沙盒下 解决问题 *解决问题1:tableView滑动卡顿,图片延时加载 解决方法:添加异步请求,在子线程里请求网络,在主线程刷新UI *解决问题2:反复请求网络图片,增加用 ...

  3. IOS中获取各种文件的路径介绍及方法

    IOS中获取各种文件的目录路径的方法 技术交流新QQ群:414971585 iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. docum ...

  4. 在iOS中获取UIView的所有层级结构 相关

    在iOS中获取UIView的所有层级结构 应用场景 在实际 iOS 开发中,很多时候都需要知道某个 UI 控件中包含哪些子控件,并且分清楚它们的层级结构和自个的 frame 以及 bounds ,以便 ...

  5. iOS中获取本地通讯录联系人以及汉字首字母排序

    iOS中获取手机通讯录中的联系人信息: /*** 加载本地联系人*/ - (void)loadLocalContacts { //新建一个通讯录类 ABAddressBookRef addressBo ...

  6. iOS Orientation获取

    [iOS Orientation获取] 1.[[UIDevice sharedInstance] orientation] 必须调用beginGeneratingDeviceOrientationNo ...

  7. iOS UIWebView 获取内容实际高度,关闭滚动效果

    本文转载至 http://my.oschina.net/Khiyuan/blog/341535   iOS UIWebView 获取内容实际高度,关闭滚动效果 近期做东西,将 UIWebView 嵌套 ...

  8. iOS 日志获取和实时浏览器显示日志

    https://juejin.im/entry/576252855bbb500063e51c7d iOS 日志获取和实时浏览器显示日志

  9. IOS中获取各个文件的目录路径的方法和NSFileManager类

    转自:http://blog.sina.com.cn/s/blog_5fb39f910101di92.html IOS中获取各种文件的目录路径的方法 iphone沙箱模型的有四个文件夹,分别是什么,永 ...

随机推荐

  1. [蓝点zigBee] CC2530 实用教程总览

    Zstack 单个模块实验(无数据通信) 1Zstack精简,增加串口数据 Zstack 里面工程较多,整体代码量很大,若入门只需要先之关注其中的一个工程,在这个工程里添添补补逐步学习. 这一节主要是 ...

  2. 数组中&a与&a[0]的区别 转载自http://blog.csdn.net/FX677588/article/details/74857473

    在探讨这个问题之前,我们首先来看一道笔试题,如下: [摘自牛客网]下列代码的结果是:(正确答案是 C) main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)( ...

  3. python网络编程(二)

    UDP介绍 UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地.由于UDP在传输 ...

  4. Moo University - Financial Aid [POJ2010] [堆]

    题意: 在C头牛里选N头牛,每头牛需要花掉一定经费ai才能得到一定得bi分,在不超过经费F的情况下,使得N头牛的得分中位数最大.(1 <= N <= 19,999,奇数) (N <= ...

  5. 受欢迎的牛 [HAOI2006] [强连通] [传递闭包(划)]

    Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛 A 认为牛 B受欢迎.这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A ...

  6. Android 去除应用标题栏(Android Studio)

    修改styles.xml文件 <resources> <!-- Base application theme. --> <style name="AppThem ...

  7. 利用Ajax和JSON实现关于查找省市名称的二级联动功能

    功能实现的思路:我们经常碰见网上购物时候填写收件地址会用到这个查找省市县的三级联动查找功能,我们可以利用Ajax和JSON技术模拟这个功能,说白了同样是使用Ajax的局部数据更新功能这个特性.因为省市 ...

  8. jPlayer获取播放时间

    关于jPlayer的用法,可以参考:jPlayer 2.6.0开发者手册 http://www.jplayer.cn/developer-guide.html 视频播放例子: //视频播放 var v ...

  9. Linux系统复制文件/文件夹到远程服务器

    从一个服务器复制文件到另一个服务器,或者从本地到远程复制是 Linux 管理员的日常任务之一. 我觉得不会有人不同意,因为无论在哪里这都是你的日常操作之一.有很多办法都能处理这个任务,我们试着加以概括 ...

  10. 【问题与解决】怎么删除TFS云端上的项目

    最近使用了Visual Stuidio提供的网络项目管理,感觉跟visual stuido结合起来还是很好用的,新建项目很简单,但是在删除项目的时候就没有那么简单了,直接通过VS的团队管理删除还会报错 ...