【发布时间】:2017-12-10 22:01:17
【问题描述】:
我的目标是使用工具测试 (AndroidJUnitRunner) 为 Android CPU 密集型代码编写自动性能测试。
我很惊讶的发现测试结果不可靠,模拟CPU密集型代码,我想测试,我写了如下循环
for(int i=0;i<1000000;i++){
Math.pow(2,i);
}
代码作为工具测试在 Android 应用中进行了测试
我得到的结果如下:
仪器测试显示完成循环约 230 毫秒 而同一设备 (G5) 上的相同代码需要大约 600 毫秒
我会很感激为什么在 AndroidJUnitRunner 上执行相同代码所花费的时间比在真实设备上少三倍,而它们最终都在同一设备上执行
【问题讨论】:
-
AndroidJUnitRunner 的优先级可能比您应用中的代码高
-
这引出了一个问题,是否有可能将特定代码设置为更高优先级
-
应用程序中的代码在主线程上执行,我认为它具有最高优先级
-
我尝试使用 Thread.currentThread().setPriority(Thread.MAX_PRIORITY) 并从后台线程运行它,我得到了相同的结果:(
-
假设,当你运行一个标准应用程序时,还有很多其他的事情发生,而当你运行一个插桩测试时——只有这么多的代码块被执行。
标签: android performance-testing android-instrumentation