Android bitmap 释放 解决Error create Hprof file问题

2023-12-18 04:50

本文主要是介绍Android bitmap 释放 解决Error create Hprof file问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近做内存优化,简单写下:

1.通过Android Studio检测如图,

a.选择你要检测的进程(如果你是多进程应用)

b.点击GC(小车图标),再点击 dump java heap


问题:

在b的时候可能会出现 Error create Hprof file

解决方法:

用 Android Device Monitor (绿色机器人图标,就是Eclipse里的DDMS ,操作步骤和AS里一样,就是图标变成文字了。(选进程:点击左侧的进程列表中的一项)

dump出文件,保存 然后拖入到AndroidStuido里打开。




2.分析文件,找到持有Bitmap引用的类。

用AS打开文件后,在左侧Class Name 里做个排序 然后敲类名(AS会搜索),然后在右侧选中一个bitamp,右击View Bitmap就可以看到图了。

这时候查看Reference Tree,查看引用,我的图里显示的是被Volley引用了,这个就不用管了(LRU空间换时间,本来就不会马上释放)。

但如果是别的类的话,一般是ImageView,如另一张图显示的是  NewsVideoCardView中的playStateDrawable, ImageView的mBackGround.





3.断开引用链

只要把引用的属性置为null就行了。

playStateDrawable = null;

mPlayStatueImage.setBackgroundDrawable(null);

当然ImageView是有两个Drawable,一个是父类View的background,一个是ImageView自己mDrawable用如下的方法就行了:

setImageBitmap(null);


4.心得

就是耐着性子分析就好了,还有几个注意点:

1.你可以查到Bitmap被NewsVideoCardView引用后,再去ClassName那个栏里搜索这个类,然后看他的属性,看为什么没释放。

2.查看Reference Tree里的对象个数,这个在你觉得释放,但可能遗漏的时候很关键。


这篇关于Android bitmap 释放 解决Error create Hprof file问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/507099

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题