这篇文章主要介绍“android大图片加载OOM处理问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“android大图片加载OOM处理问题怎么解决”文章能帮助大家解决问题。我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状、不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小。比如说系统图片库里展示的图片大都是用手机摄像头拍出来的,这些图片的分辨率会比我们手机屏幕的分辨率高得多。大家应该知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常。先看一个栗子:主要功能为:ListView 的滑动列表展示,每个条目是一张图片xml主页面布局ListView 的item 布局布局界面非常简单,不用多说什么,java代码由于我们测试的图片非常大,属于超清的那种,我们用默认的imageView.setImageResource(R.drawable.girl) 方法,是完全显示此高清图片,此时在模拟器上运行之后,虽然能够显示,但是界面灰常卡顿有木有,可以说根本划不动的,口说无凭,上图
唉!不好意思没图了,本来已经录好图了,奈何超过2M没法上传,总之就是很卡很卡啦
看看,不骗人,真的很卡呀!!!然后,接下来我们就要解决这个问题了,怎么解决呢,我们通过思考就会发现,其实造成这种结果单位主要原因就是要显示的图片太大了,我们完全不需要展示这麽大的图片,没错我们可以把图免费云主机域名片压缩一下,比如压缩成 100*100 的啦.我们主要使用的就是BitmapFactory.decodeResource()方法,该方法有多个重载,我们使用
decodeResource (Resources res,
int id,
BitmapFactory.Options opts)(该方法返回一个Bitmap对象.)
和 BitmapFactory.Options() 这个类该类可以对要加载的图片进行配置下面我给出代码详细注释:首先创建一个方法 decodeSampleBitmapFromResource() 主要来把大图片解析为适当的图片calculateInSampleSize(options, reqWidth, reqHeight); 的实现上面是对用到的两个自定义的方法的解释,把他俩用到 主Java 代码中如下:最后给出java完整程序我们把 imageView.setImageResource(R.drawable.girl);//完全显示图片大小,ListView 滑动界面异常卡顿
这行代码,改为这样写在我快速的来回滑动当中,然后就并且报了下面的异常信息很明显的OOM了有木有,那我们又该用啥办法解决呢,仔细思考我们有发现了问题的关键所在,就是ListView 条目的图片快速加载,快速释放,在某一时刻,图片加载过多,导致了 OOM 的问题.我们自然就可以想到,能不能别让滚出屏幕的图片离开呢,是不是可以把他们缓存起来呢,所以,如果朋友们熟悉LruCache 这个类的话,又会想到解决方案了,不熟悉的也没关系,我还是会给出详细注释的:首先看 我们自定义的 initLruCache(); 方法,在 onCreate() 方法中调用然后再ListView 的适配器中的 getView() 方法中给ImageView 设置图片时,吧图片从缓存中取出,放入就行了完整java 代码如下关于“android大图片加载OOM处理问题怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。
本文小编为大家详细介绍“Python循环语句和函数怎么应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python循环语句和函数怎么应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。循环允许多次运行一段代码。在 Python 中…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。