从android.view.GLES20DisplayList发布位图
有谁知道如何从android.view.GLES20DisplayList释放位图。 为什么它会让他们活着,即使你手动清理ImageView? 或者,也许有一种方法来禁用GLES20DisplayList,试图在AndroidManifest中使用android:hardwareAccelerated =“false”,仍然没有运气。
看起来像仅在4.2(1)
更新:看起来你不能在4.2.1上禁用硬件加速(bug?)
简单测试:
Android manifest:
application ... android:hardwareAccelerated="false"
System.out.println("isHardwareAccelerated: " + mListView.isHardwareAccelerated());
mListView.setLayerType(LAYER_TYPE_SOFTWARE, null);
System.out.println("isHardwareAccelerated: " + mListView.isHardwareAccelerated());
结果:
12-06 17:15:27.129: I/System.out(30752): isHardwareAccelerated: true
12-06 17:15:27.129: I/System.out(30752): isHardwareAccelerated: true
这似乎是4.2中的内存泄漏。 看起来像这个修复是针对它:https://android.googlesource.com/platform/frameworks/base/+/034de6b1ec561797a2422314e6ef03e3cd3e08e0
我在清单4.2中禁用了硬件加速,这是我遇到这个问题的活动,这有助于android.view.GLES20DisplayList内存持有。
在活动清单中: android:hardwareAccelerated="@bool/gpu_enabled"
在v17的values.xml中:
<bool name="gpu_enabled">false</bool>
在默认的values.xml中,我将它设置为true。
我最近对这个问题做了深入的记忆分析。 正如Yulia在上面指出的那样,禁用硬件加速通常会起到诀窍的作用。 或者,您可以将ImageView的Drawable设置为null,回收位图,或者像您指出的那样分离ImageView。
但是,根据API版本,位图存储器可能会或可能不会从GLES20DisplayList中释放。 我在博客文章 - Android位图内存分析中深入讨论了这些不同的行为和可能的解决方案,但快速解决方案是禁用硬件加速。
链接地址: http://www.djcxy.com/p/66973.html