[英]Cached image still grow memory usage on rotation
我知道Android上的Drawable内存泄漏。 我看到了很多指南,并尝试使用自定义缓存的Drawable。
我做了什么测试:
public class myApp extends Application {
public static HashMap<String, Drawable> test_svg_drawables = new HashMap<>();
...
public void onCreate() {
super.onCreate();
...
test_svg_drawables.put("i1", ContextCompat.getDrawable(this, R.drawable.ic_svg_image1));
test_svg_drawables.put("i2", ContextCompat.getDrawable(this, R.drawable.ic_svg_image2));
test_svg_drawables.put("i3", ContextCompat.getDrawable(this, R.drawable.ic_svg_image3));
test_svg_drawables.put("i4", ContextCompat.getDrawable(this, R.drawable.ic_svg_image3));
}
在我的活动onCreate(科特琳)上:
imageView1.setImageDrawable(test_svg_drawables.get("i1"))
imageView2.setImageDrawable(test_svg_drawables.get("i2"))
imageView3.setImageDrawable(test_svg_drawables.get("i3"))
imageView4.setImageDrawable(test_svg_drawables.get("i4"))
就像每个人都说的那样,由于即时消息使用的是可缓存的Drawables,因此它应该仅在第一次创建时才增加内存,并且要保持相同的内存使用率,但这不是真正的情况,请查看此内存监视器: 在此处输入图像描述
为什么在旋转屏幕时它仍在增长?
从40mb(首次创建)到近110mb(经过一些旋转)
我已经在较旧的版本中出现了内存泄漏,并且我试图再次避免它
我应该担心吗? (在我拍照后10分钟仍保持相同的110mb,我结束了活动)
ps1:使用svg_drawable(从AndroidStudio->新建->矢量资产导入)
ps2:我将使用风景版本(这只是没有它的演示)
首先,我建议您不要使用静态引用,请不要使用它们。 即使在用户角度看销毁了它们所附着的组件,它们也保留了对该组件的内存引用。 例如,当您使用静态成员来保存事物时,它们将在整个过程的生命周期中保存它们拥有的数据,并且隐式地保存它们所属的类的引用。 因此,基本上,当配置更改时,静态成员将不允许垃圾收集器清除该组件的内存,因为用户正在使用该组件的新实例,因此该内存不再由用户使用。 因此,基本上在Application
有一个onConfigurationChanged
方法,您应根据要求重写该方法,并且也应进行此操作 。 祝你好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.