使用 Android-Espresso 运行多个测试时出现内存不足异常
Posted
技术标签:
【中文标题】使用 Android-Espresso 运行多个测试时出现内存不足异常【英文标题】:Out of memory exception when running multiple test with Android-Espresso 【发布时间】:2015-03-24 07:59:20 【问题描述】:我有很多测试,分开在不同的文件中,当我分别运行每个类时,它运行良好。但是当我在我的项目中运行所有测试时,我在最后一个测试类中遇到了这个错误。
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
【问题讨论】:
【参考方案1】:我相信这并不是特别因为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)
// .....
这是尝试加载大图像并且没有足够的内存来存储它时的常见错误。
通常该解决方案涉及某种预处理,例如在将位图加载到内存之前缩小位图。
我建议你参加这门课程,了解加载大型位图时发生了什么,以及如何有效地显示它们:https://developer.android.com/training/displaying-bitmaps/index.html
【讨论】:
你在哪里,原来是应用程序有问题,它没有按预期清理内存。谢谢:) 在调试版本中,考虑注册一个UncaughtExceptionHandler
,当存在OOM时调用Debug.dumphprofData
。可能更容易调试下一次内存泄漏。以上是关于使用 Android-Espresso 运行多个测试时出现内存不足异常的主要内容,如果未能解决你的问题,请参考以下文章