2017-07-06 93 views
8

我的目标是使用工具测试(AndroidJUnitRunner)为Android CPU密集型代码编写自动性能测试。使用Android仪器测试测量性能

我很惊讶地发现,测试结果是不可靠的,模拟CPU密集型代码,我想测试一下,我写了下面的循环

for(int i=0;i<1000000;i++){ 
    Math.pow(2,i); 
} 

的代码进行了测试作为一种工具测试Android应用

内我得到的结果如下:

纯试验表明〜230ms,以完成循环 而相同的装置(G5)上的相同的代码把〜600毫秒

我欢迎任何线索,为什么对AndroidJUnitRunner同一代码的执行需要较少的三倍的时间比在实际设备上,而两者最终都在同一台设备

+0

也许AndroidJUnitRunner比在你的应用程序 – MatPag

+0

这引出了一个问题的代码更优先,有没有在应用程序代码是我认为它在主线程上执行任何的可能性来设定具体的代码更优先 –

+0

无论如何,最高优先级 –

回答

5

简单的速度来自CPU上执行,而你正在执行一些代码,如果CPU没有做任何繁重的工作并且所有的CPU核心都运行起来,它会很快地执行你的代码。在android中,'UI渲染'是AndroidJUnitRunner没有做的最密集的工作,这就是为什么它很快。

如果你想了解的Android在不同的场景中进行,看看这个:https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE

1

我认为对于在结果差异的原因是,该设备需要做的工作的区别与测试平行。 (开销)。

我建议您尝试使用比AndroidJUnitRunner开销更大的测试框架。你可以试试Robotium

+0

谢谢,会尝试,好点 –