最好的方法是手动分析您的应用程序。重复执行一项活动,并结合使用内存演练、堆查看器和分配跟踪器来查找问题。
但是,如果您必须通过 CI(AFAIK 没有可用的插件)来完成,有两种方法可以解决:
1) 运行您的 CI UI 测试用例并使用 dumpsys:
在测试开始、每个 TC 之后和每个 TC 结束时使用 dumpsys:
Runtime.getRuntime().exec(new String[]{ADB_PATH,"shell","dumpsys meminfo com.example.app >/sdcard/memdump"+filename+".txt","exit","adb pull memdump"+i+".txt"});
这应该会为您提供一个包含应用程序 meminfo 的 filename.txt。您在这里需要的是您的应用程序的 PSS 值。 PSS 越重视应用程序的内存占用量。只需将文件作为流打开。使用模式搜索获取 PSS 值并将其保存在每个 TC 之后的列表中。这样,在测试之后,您将在应用程序的各个点获得 PSS 值列表。您可以从中创建趋势/图表。
如果它是严格的线性图,那么您应该深入研究。除此之外,您不会遇到很多问题。
2) 编写一个重复执行操作的套件并使用 dumpsys:
发现偷偷摸摸的内存泄漏需要您重复执行一些操作(例如启动 50 次活动)
假设您有一个主页,您可以从菜单栏刷新它。
现在写一个TC:
- a) 转到菜单栏并单击刷新按钮。
- b) 转储 meminfo ,获取 PSS 并将其保存在列表中。
- c) 重复一个
- d) 重复执行此操作,比如说 50 次,然后为该特定活动制作趋势图。
这将是一个耗时的套件,但您将获得的趋势将是有意义的,并且应该会为您找到好的问题。
我建议你使用 2。另外,如果有人可以提出任何改进或其他方式,那就太棒了。