运行 多次测试 Android-Espresso 时出现内存不足异常

Out of memory exception when running multiple test with Android-Espresso

我有很多测试,分开在不同的文件中,当我 运行 每个 class 分开时它 运行 没问题。但是当我 运行 我项目中的所有测试时,我在最后一个测试 classes 上得到了这个错误。

android.view.InflateException: Binary XML file line #82: Error inflating class <unknown>

Caused by: java.lang.OutOfMemoryError: Failed to allocate a 17462912 byte allocation with 15698580 free bytes and 14MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:973)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2423)
at android.content.res.Resources.loadDrawable(Resources.java:2330)
at android.content.res.TypedArray.getDrawable(TypedArray.java:749)
at android.widget.ImageView.<init>(ImageView.java:146)
at android.widget.ImageView.<init>(ImageView.java:135)
at android.widget.ImageView.<init>(ImageView.java:131)
... 23 more

我相信这并不是特别因为 Espresso 本身,虽然我可能是错的,但更多是因为 运行 所有这些测试一起导致创建一些限制可用内存的条件.这不是一件坏事,因为这可能会在生产中发生。

正在查看您的日志:

// ......
Caused by: java.lang.OutOfMemoryError: Failed to allocate a 17462912 byte allocation with 15698580 free bytes and 14MB until OOM

at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
// .....

这是尝试加载大图像但没有足够的内存来存储它时的常见错误。

通常解决方案涉及某种预处理,例如在将位图加载到内存之前缩小位图。

我建议您通过这个 class 了解加载大型位图时发生的情况,以及如何有效地显示它们:https://developer.android.com/training/displaying-bitmaps/index.html