从android.view.GLES20DisplayList释放位图(Release bitmap

2019-08-03 15:45发布

有没有人知道如何从android.view.GLES20DisplayList释放位图。 为什么它让他们活着,即使你干净,手动比方说,ImageView的? 或者,也许有禁用GLES20DisplayList的方式,试图用机器人:硬件加速=“假”,在AndroidManifest,仍然没有运气。

貌似只有4.2受影响(1)

更新:看起来你无法在4.2.1禁用硬件加速(错误?)

简单的测试:

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

Answer 1:

这似乎是在4.2内存泄漏。 看起来是这样的修复旨在反对: https://android.googlesource.com/platform/frameworks/base/+/034de6b1ec561797a2422314e6ef03e3cd3e08e0

我在清单为4.2,我遇到了这个问题的活动禁用硬件加速功能,这有助于与android.view.GLES20DisplayList内存控股。

在清单中的活动: android:hardwareAccelerated="@bool/gpu_enabled"

在values.xml为V17:

<bool name="gpu_enabled">false</bool>   

在默认情况下values.xml,我将它设置为true。



Answer 2:

最近我对这个问题进行了深入的内存分析。 由于尤利娅指出上面,禁用硬件加速会做一般的伎俩。 或者,你可以设置的ImageView绘制对象为null,回收的位图,或分离的ImageView为你指出。

然而,根据不同的API版本,位图的内存可能会或可能不会从GLES20DisplayList释放。 我讨论的深入,这些不同的行为和可能的解决方案我的博客文章- Android的位图内存分析 ,但快速的解决办法是禁用硬件加速。



文章来源: Release bitmaps from android.view.GLES20DisplayList