使用 Android 仪器测试测量性能
Measuring performance using Android instrumentation test
我的目标是使用工具测试 (AndroidJUnitRunner) 为 Android CPU 密集型代码编写自动性能测试。
我很惊讶的发现测试结果不靠谱,为了模拟CPU密集的代码,我想测试一下,我写了下面的循环
for(int i=0;i<1000000;i++){
Math.pow(2,i);
}
代码已作为工具测试在 Android 应用程序中进行测试
我得到的结果如下:
仪器测试显示完成循环大约需要 230 毫秒
而同一设备 (G5) 上的相同代码耗时约 600 毫秒
我会很感激为什么在 AndroidJUnitRunner 上执行相同的代码比在真实设备上执行的时间少三倍,而它们最终都在同一设备上执行
只是速度来自 CPU,当你正在执行一些代码时,如果 CPU 没有做任何繁重的工作并且所有 CPU 核心都已启动,它将执行你的代码相当快。在 android 中,'UI rendering' 是 AndroidJUnitRunner
没有做的最密集的工作,这就是为什么它很快。
如果您想了解 android 在不同情况下的表现,请看一下:https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE
我认为结果不同的原因是设备在测试的同时需要做的工作不同。 (开销)。
我建议您尝试使用比AndroidJUnitRunner
开销更大的测试框架。您可以 Robotium 试试看。
我的目标是使用工具测试 (AndroidJUnitRunner) 为 Android CPU 密集型代码编写自动性能测试。
我很惊讶的发现测试结果不靠谱,为了模拟CPU密集的代码,我想测试一下,我写了下面的循环
for(int i=0;i<1000000;i++){
Math.pow(2,i);
}
代码已作为工具测试在 Android 应用程序中进行测试
我得到的结果如下:
仪器测试显示完成循环大约需要 230 毫秒 而同一设备 (G5) 上的相同代码耗时约 600 毫秒
我会很感激为什么在 AndroidJUnitRunner 上执行相同的代码比在真实设备上执行的时间少三倍,而它们最终都在同一设备上执行
只是速度来自 CPU,当你正在执行一些代码时,如果 CPU 没有做任何繁重的工作并且所有 CPU 核心都已启动,它将执行你的代码相当快。在 android 中,'UI rendering' 是 AndroidJUnitRunner
没有做的最密集的工作,这就是为什么它很快。
如果您想了解 android 在不同情况下的表现,请看一下:https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE
我认为结果不同的原因是设备在测试的同时需要做的工作不同。 (开销)。
我建议您尝试使用比AndroidJUnitRunner
开销更大的测试框架。您可以 Robotium 试试看。