我的Android应用有一些运行缓慢的功能。单元测试可以完美捕获它。单元测试执行表明它的运行速度比应该的速度慢。
Android Studio一直向我提供run方法旁边的菜单选项:“Profile”而不是run。我选择了那个选项,但似乎没有什么不同于运行。我希望Android Studio在测试完成后打开一个窗口,其中包含所有方法调用的时间。
我搜索了Google和Android网站。我发现的所有内容都与Android Studio中的分析有关。
如何分析Android单元测试? (该配置文件选项真正做了什么?)
答案 0 :(得分:2)
我遇到了同样的问题,我决定研究一个解决方案,因为我认为这不太难。男孩,我错了。
我从未发布过的原始答案包含一些Thread.sleep
和手动计时的尴尬摆弄,并在正确的时间点按了正确的按钮。在代码中使用Debug API替换为更优雅的解决方案。
使用Android Studio 3.1.3是我的步骤:
我不得不将我的实际单元测试复制到androidTest 中(因为我实际上对算法复杂度(而不是时间消耗)感兴趣),因此我发现没有模拟器就无法在Android Studio中进行实际配置。测试这是有道理的,但就我而言,我想确保即使在复杂的情况下,我的方法也可以以可预测的方式运行。)
为避免需要摆弄Thread.sleep
和显示开始/停止的日志输出,可以使用Debug.startMethodTracing("File"); or Debug.startMethodTracingSampling() and Debug.stopMethodTracing();
或类似的组合(请参见https://developer.android.com/studio/profile/generate-trace-logs)。我的代码现在看起来像
@Test
public void Test_Something() throws Exception
{
Debug.startMethodTracing("Predict");
// DO YOUR CODE
Debug.stopMethodTracing();
}
当我现在执行配置文件时,可以获取在设备的上述位置生成的.trace,如上面的链接所述:
(再次阅读链接的页面,因为您将需要我的应用程序已经拥有的WRITE_EXTERNAL_STORAGE
权限,因此对于我而言,这并不是一件麻烦事。
编辑:升级到Android Studio 3.2之后,我现在确实可以加载和保存会话并将其显示在Profiler中。这已经改善了很多。一个有趣的事实:当我在Android Studio 3.1.3中打开跟踪时,我看到了方法的命中数(调用方法的频率),而不是它们的时钟时间。另一方面,在探查器中,我还无法找到通话时间,但是可以访问挂钟时间。如果有人也暗示如何显示它们,那就太好了。