我们最近刊登了一些关于能耗和资源消耗的文章,旨在强调以下内容:
· 应用快速消耗电量令消费者抓狂,进而导致很低的评分
· 简单更改代码便可减少能耗,延长电池寿命
· 如果你能够找出应用中的性能瓶颈,便可以优化代码,解决问题
· Trepn™ Profiler和Trepn plug-infor Eclipse这两款分析工具能够帮助你查找并修复影响应用性能或导致耗电过多的常见问题
但你如何能够找出这些瓶颈,以及造成能耗过多的原因?你如何确保这两款工具适用于你的应用?如果适合,你如何知道应采取哪些修复措施?
我将在本文中展示如何从应用中发送消息,让Trepn Profiler在分析过程中显示这些消息,为你解答上述问题。
应用状态
你可以利用Trepn查看应用在什么时间内在做什么事情。一旦你安装了Trepn并分析自己的应用,便可以修改代码,在应用行为和Trepn Profiler显示的活动之间建立联系,这一切得益于Trepn能够捕捉应用发送的Android Intents。
假设你的应用与网页服务器和本地SQLite数据库通讯,获取并发送数据。若应用执行了多个请求,Trepn Profiler将显示出一个能耗峰值,但你可能无法查看是哪个任务造成了这一峰值。应用状态能够帮助你查明应用是否正在消耗过多电量,如果是的话,将告诉你如何解决代码问题。
发现能耗峰值
假设一款具有打开URL和滚动功能的简单网页应用。在你的测试设备上运行并配置Trepn Profiler,将电源设定在指定数据点(说明:Trepn Profiler能够跟踪与显示设备上的多个不同系统数据点)。接着运行应用,Trepn Profiler将生成图表,编译出活动数据库。图表看起来如下所示(添加的红色标记):
当你分析图表时,或许会对突然升高的耗电量感到疑惑。“出现峰值时,应用都在做什么?”
利用应用状态,你可以找出其中的答案。
修改你的代码
无论应用何时发生变化,Trepn Profiler都能从应用中发送一个简单的信号,更新状态。接着Trepn将在图表Y轴更新应用状态表。
升级的语法如下:
stateUpdate.putExtra("com.quicinc.Trepn.UpdateAppState.Value",
stateUpdate.putExtra("com.quicinc.Trepn.UpdateAppState.Value.Desc",
给每个状态分配一个值:
然后用各自的方法添加代码:
Intent stateUpdate = new Intent("com.quicinc.Trepn.UpdateAppState");
stateUpdate.putExtra("com.quicinc.Trepn.UpdateAppState.Value", 2);
stateUpdate.putExtra("com.quicinc.Trepn.UpdateAppState.Value.Desc", "scrollingPaused()");
sendBroadcast(stateUpdate);
.
.
openURL()
.
Intent stateUpdate = new Intent("com.quicinc.Trepn.UpdateAppState");
stateUpdate.putExtra("com.quicinc.Trepn.UpdateAppState.Value", 7);
stateUpdate.putExtra("com.quicinc.Trepn.UpdateAppState.Value.Desc", "openUrl()");
sendBroadcast(stateUpdate);
.
.
pageScrolling()
.
Intent stateUpdate = new Intent("com.quicinc.Trepn.UpdateAppState");
stateUpdate.putExtra("com.quicinc.Trepn.UpdateAppState.Value", 9);
stateUpdate.putExtra("com.quicinc.Trepn.UpdateAppState.Value.Desc", "pageScrolling()");
sendBroadcast(stateUpdate);
.
.
编译你的APP,并在测试设备上安装。
绘制应用状态图表
这一次,你可以在Trepn Profiler中设置数据点,在其中包括应用状态,像以前一样运行应用。当你停止运行,并分析数据图表时,你会看到这样一张表(添加了红色标记):
Trepn Profiler像以前一样在X轴显示时间,但这一次在Y轴上以蓝绿两种颜色分别显示应用状态(int_value)和电池消耗。观察之前困扰你的峰值与应用状态,你可以得出以下结论:
· 峰值1——出现峰值时你的应用处于空闲状态(应用状态=2),因此峰值可能是由系统中其他原因造成。
· 峰值 2—— 由于应用在加载 URL (应用状态 =7 ),因此必然出现峰值。· 峰值3——应用已加载完页面,正在滚动(应用状态=9),因此必然出现峰值。
若你真的观察需要优化的任务,Android Intents周围的代码将是一个非常好的起点。
接下来,分析运行,选择“状态”,查看如下表格:
此处按照你指定的字符串值显示各任务,你可以轻松看到平均能耗和总能耗。你每次优化代码减少能耗时,可观察这些统计数据,衡量自己的进步。以下是两个重要提示:
· 该例子跟踪并显示了能耗。你可以通过设置让Trepn Profiler跟踪许多其他数据点,包括CPU负载/频率、GPU、Wi-Fi网络使用情况、移动网络使用情况、唤醒锁和其他更多内容。
· 若你十分关注于优化应用在系统资源上的效果,或许应当编写自动版本的应用,使其每次启动时都能执行相同的最重要任务。
下一步
为什么要毫无目的地优化呢?Trepn Profiler中的应用状态能够帮助你查明能耗和性能瓶颈问题,确定如何优化代码以解决问题。
· Trepn Profiler 不收取费用,现在就开始使用吧
· repnProfiler下载文件中包含Trepn用户指南。
欲了解更多详情,请查看第三章“为应用状态和自动测试使用网络”