注意:我测试时的ios操作系统是8.1,现在ios9.0及以后的耗电量比老的系统少了一个量级,官方说减少20%,我的手机在熄屏的耗电量减少了30%以上,亮屏幕减少不太多。
具体编译宏文件和GT采集的部分数据文件下载地址是:http://download.csdn.net/detail/jia12216/8787079
腾讯的GT耗电量统计是通过电池状态监听通知事件和记录两次的时间差来计算耗电速度的,所以它统计的是整个手机的耗电量。
腾讯的GT参考文章及下载地址:http://gt.tencent.com
IOS中电池变化的监听参考文章:http://my.oschina.net/u/936286/blog/132943 因此你可以不依赖于GT自己用代码实现耗电量统计。
下载GT库,把GT库导入工程。
图片一
添加libstdc++.6.0.9.dylib库(不添加该库编译不通过)。
图片二
在AppDelegate.m或AppDelegate.mm文件的
- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions函数中增加代码:
ifdef DEBUG
GT_DEBUG_INIT;
// GT Usage(合入) 设置 GT logo 不旋转及支持方向
GT_DEBUG_SET_AUTOROTATE(NO);
GT_DEBUG_SET_SUPPORT_ORIENTATIONS(UIInterfaceOrientationMaskPortrait);
endif
这样就把GT集成到你的应用中了,通过xcode把应用装到调试手机上并运行应用,点小企鹅图标就可以打开GT了。点那个红色开始采集数据按钮,按钮变成可以暂停状态就开始采集数据了。当需要保持数据时点暂停按钮,然后点保存按钮弹出文件保存提示框,输入文件名并点保存就把采集的数据保存到应用下面的GT目录下。电池的数据就保存在GT/Para/GW_*/Battery_*.csv文件里。
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。 CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是7-bitASCII是最基本的通用编码。
用Excel直接打开电池的数据文件(若用Excel导入电池的数据csv文件得到的分列显示属性的EXCEL文件),文件的第17显示的记录各个域名,前面三个逗号是为了把前面15行内容显示在左边,具体记录数据显示在右侧(就是空列)。,,,time,current(mA),CostCapacity(mAh)
time是收到电量变化通知并记录数据的时间,current(mA)表示统计间隔周期的平均电流,CostCapacity(mAh)表示从开始统计到当前时刻总共消耗的电量。
从18就是统计的电池电量变化的具体数据了。格式是:,,,14:01:54.170,1145.0,16
用Excel文件,另存为新的启动宏的工作薄-handleover.xlsm
图片三
录制编译宏
图片四
图片五
粘贴代码并保存文件
图片六
Sub handleover()
Dim i, j, n As Long
Dim k As Double
Dim str1 As String
For i = 18 To 1000
If “” = Cells(i, 1) Then
n = i - 1
Exit For
End If
Next
If n < 18 Then
Exit Sub
End If
For i = 18 To n
str1 = Trim(Cells(i, 1).Value)
If Len(str1) < 8 Then
Exit Sub
End If
If “,,,” <> Left(str1, 3) Then
Exit Sub
End If
str1 = Right(str1, Len(str1) - 3)
j = InStr(str1, “,”)
Cells(i, 5) = Left(str1, j - 1)
str1 = StrReverse(Right(str1, Len(str1) - j))
j = InStr(str1, “,”)
Cells(i, 6) = StrReverse(Right(str1, Len(str1) - j))
Cells(i, 7) = StrReverse(Left(str1, j - 1))
Next
Columns(5).NumberFormatLocal = “hh:mm:ss”
Columns(5).ColumnWidth = 20
Columns(6).ColumnWidth = 20
Columns(7).ColumnWidth = 20
Columns(8).ColumnWidth = 20
Columns(9).ColumnWidth = 20
Columns(10).ColumnWidth = 20
Columns(11).ColumnWidth = 20
Cells(1, 5) = “记录时间”
Cells(1, 6) = “统计间隔周期的平均电流(mA)”
Cells(1, 7) = “从开始统计到当前时刻总共消耗的电量(mAh)”
Cells(1, 8) = “两次记录时间间消耗的电量(mAh)”
Cells(1, 9) = “两次记录时间(m)”
Cells(1, 10) = “两次记录时间(s)”
Cells(1, 11) = “平均耗电量(s/mAh)”
For i = 19 To n
If n <= 18 Then
Exit Sub
End If
k = Cells(i - 1, 7).Value
Cells(i, 8) = Cells(i, 7).Value - k
Cells(i, 9) = DateDiff(“n”, Cells(i - 1, 5).Value, Cells(i, 5).Value)
Cells(i, 10) = DateDiff(“s”, Cells(i - 1, 5).Value, Cells(i, 5).Value)
k = Cells(i, 8).Value
Cells(i, 11) = Cells(i, 10).Value / k
Next
End Sub
当然若是已经有编译宏文件并打开文件,就可以先按照图片四点击宏直接启动宏运行就可以了。
图片七
图片八
对电池的数据统计结果如下:
记录时间 统计间隔周期的平均电流(mA) 从开始统计到当前时刻总共消耗的电量(mAh) 两次记录时间间消耗的电量(mAh) 两次记录时间(m) 两次记录时间(s) 平均耗电量(s/mAh)
集成GT的最鲜到配送员app,在不同场景下用GT采集的电量数据分析结果:
场景一:打开应用停留在主页面不锁屏不操作,平均耗电量5.221505376 minutes/16mAh(1%),平均采集间隔5.258064516秒分钟
场景二:打开应用不断刷新主页面切换页面,平均耗电量2.80378787878 minutes/16mAh(1%),平均采集间隔3分钟
场景三:打开应用,锁屏坐公交车,平均耗电量9.854166666 minutes/16mAh(1%),平均采集间隔10分钟
场景四:打开应用不断在非地图页面和地图页面切换,平均耗电量2.737037037 minutes/16mAh(1%),平均采集间隔2.666666667分钟
场景五:打开应用不断在非地图页面和地图页面切换造成地图重新加载的耗电的量大增的数据,平均耗电量2.4 minutes/16mAh(1%),平均采集间隔2.333333333分钟
场景六:打开应用锁屏长期不移动不操作,平均耗电量152 minutes/16mAh(1%)
gt数据总结:
若开启应用亮屏以5.22分钟/1%电量为基准。
锁屏耗电速度为亮屏的3.43%,和服务间的消息交互(包括频繁刷新页面)耗电速度为亮屏的186.43%,频繁使用百度地图耗电速度为亮屏的190.51%,开启应用锁屏坐公交车耗电速度为亮屏时的53.00%,开启应在切换页面时引起百度地图重新加载的耗电速度为亮屏的217.50%。
可以看到想减少app的耗电量首先要减少的是向服务器发送请求的频率。其次尽量减少百度地图的重新加载,减少push消息提示框引起亮屏,减少快速移动中的经纬度采集频率。