Android应用程序

时间:2017-05-07 13:49:29

标签: android performance profiling performance-testing perf

我想在Android上跟踪我的应用程序的某些操作的启动时间和时间。 我正在使用代码标记方法来测量我的应用程序中所有基本操作的时间。我在代码中的不同位置插入了一些代码标记。我会在达到代码标记时记录系统时间。然后我采用开始和结束标记之间的时间差来测量启动时间和其他操作时间。

每次测量场景的时间时,我都会在毫秒时间内出现一些差异。例如,如果我在10次迭代中测量启动时间,则每次在1400 ms到1600 ms范围内得到不同的值。

由于读数的这种差异,我并不总是100%确定我的更改是否会影响启动时间和其他操作时间。

据我所知,差异可能是由于以下原因:

  1. Linux内核的CPU频率缩放。所以我已经禁用了缩放并将scaling_governor设置为performance。
  2. 由于设备上执行的其他进程导致的资源使用情况。我也把它淘汰了。我使用股票Android操作系统,没有任何外部应用程序。在运行测试之前,我首先重启我的设备。因此,每次运行测试时,我的设备上都会运行相同的应用程序集。
  3. 不同的电池电量。当我的手机100%充电并插上电源时,我总是进行测试。
  4. 我每次都在同一台设备上进行测量。我有一个专门的设备来完成这项任务。
  5. 性能测量方差的其他原因是什么? 有没有更好的方法来衡量绩效?

1 个答案:

答案 0 :(得分:0)

应用程序性能可能因多种原因而有所不同。例如,

  1. 通过CPU在缓存中保存经常请求的数据。

  2. Dalvik / ART运行时的文件缓存。

  3. 由于Android同时运行多个进程。其他过程可以在程序的执行阶段之间执行。

  4. 垃圾收集可能会随时暂停执行以分析内存。

  5. 这些外部因素会影响您的时间测量,通过窃取CPU时间,占用I / O通道等。您需要在多次运行中平均测试以尝试平均这些外部因素,并且准确性/精确度将结果受苦。在Best method to measure execution time in Android?中讨论了在度量执行时获得准确时间的有用讨论。

    除此之外,性能也可能因应用程序而异。例如,

    1. App在启动过程中初始化了很多对象。

    2. App正在Activity生命周期启动中执行一些繁重的操作 方法 - onCreate(),onStart()或onResume()

    3. 布局太丰富和/或太复杂,无法衡量和绘制 第一次。

    4. 要了解对象初始化或活动生命周期方法等最常见的操作的性能,您可以使用AndroidDevMetrics

      enter image description here

      同时检查Using Traceview from Android Studio

      enter image description here