android-最初从位图泄漏了未引用的byte [],但被回收的()导致内存泄漏(直到活动停止)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android-最初从位图泄漏了未引用的byte [],但被回收的()导致内存泄漏(直到活动停止),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1666字,纯文字阅读大概需要3分钟。
内容图文
我的位图内存泄漏导致内存不足.我在Android 5.0(Samsung S5)上运行了测试.我已经使用Android Studio(1.5.1 2.0.0预览版7)调查了此问题. HPROF内存转储显示有多个byte []完全对应于我临时使用的特定巨大位图.如果我确定保留对位图的引用,则Android Studio将向我显示一个11MB大小的位图和一个11MB浅尺寸的byte [].如果我不保留对位图的引用,则某些位图将被垃圾回收,并且某些位图最终以byte []的形式出现,而没有传入的引用(即,没有父级),如图所示.
我已经对我的应用程序进行了足够的测试,足以有把握地知道该11MB字节[]是我在内存中存储的大约2891x1000x4位图.一些较小的位图也会泄漏,并且没有传入的引用出现.
上面的位图在子活动中分配.如果我返回到父活动(在相同的过程中,也就是在dalvikVM中)并强制使用2x GC,则会释放内存.退出子活动之前,多个手动GC不会释放内存.
这似乎与我是否运行bitmap.recycle()无关.如果我只是站在应用程序的同一位置并运行从同一视图中生成巨大位图的代码,则这种情况很少发生.如果我在应用程序中移动并从不同的视图生成位图,则位图的出现频率会更高,例如从50%泄漏到10%泄漏.
>这是Android的错误吗?
>我是否以某种方式使用了错误的位图,而Android Studio却无法向我显示正确的内存视图?
>我的理解是正确的,如果下面的参考树中没有父母(见图),那么内存应该由垃圾收集器释放(因此它是Android Bug或studio bug或hprof dump-bug吗?)
解决方法:
我发现了泄漏的解决方案,尽管Android Studios报告未引用的byte []仍然是一个谜.
看来我做过的ImageView
imageView.setImageBitmap(bitmap)
将防止基于GC的byte []基础位图. bitmap.recycle()无济于事,unbinddrawables()也无济于事
if (imageView.getBackground() != null) {
imageView.getBackground().setCallback(null);
}
setImageBackground(imageView, null);
imageView.setImageBitmap(null);
imageView.setImageDrawable(null);
当我从视图层次结构中删除视图并删除我自己对该视图的所有引用时,然后byte []被GC处理,泄漏就消失了.
内容总结
以上是互联网集市为您收集整理的android-最初从位图泄漏了未引用的byte [],但被回收的()导致内存泄漏(直到活动停止)全部内容,希望文章能够帮你解决android-最初从位图泄漏了未引用的byte [],但被回收的()导致内存泄漏(直到活动停止)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。