首页 技术 正文
技术 2022年11月20日
0 收藏 637 点赞 4,658 浏览 2008 个字

首先我一般使用的适配器是BaseAdapter,其中有两个方法最主要,分别是: getCount,getView,在对Listview 进行优化的时候,首先使用 convertview 和viewHolder 配合进行优化,使用convertview的母的是控件复用,从而加到减少内存的使用,使用viewHolder 的是减少findbyid 的次数.但是在进行控件以后,在进行图片加载的时候,会出现图片错位的问题,这是因为控件里面有上次残留的图片在里面,所以我们在初始化的时候需要设置一张默认图,清楚上次残留的图片,从而避免图片错位. 注意: 在进行图片加载的时候一般会造成 OOM(内存溢出),这个时候我们需要用到三级缓存策略,来进行处理,首先三级缓存分别是:1:强引用(Lrucache)2:软引用(SoftRenfence)3:SD卡(现在被 DisKLrucache) 首先当我们需要加载图片的时候:首先从强引用里面找,如果强引用没有,就从软引用里面找,如果软引用没有就从SD卡里面找,如果SD卡没有就从网络加载,通过加载请求到的图片存入到强引用(Lrucache)里面.第二:强引用一般取内存的四分之一,当强引用满了以后,就通过Lrucache 算法讲部分图片删除,同时存入到软引用里面,当软引用满了,就将部分图片存入到SD卡里面,当SD卡满了,就将一半的删除,(删除的时候根据使用日期排序), 注意:强引用是不能被垃圾回收机制回收的,软引用是可以随时被垃圾回收机制回收的.:一半情况下我们加载的图片的 url,是服务器经过二次采样以后的url,只有当点击看大图的时候才加载原图.:无论在强引用,软引用还是SD卡我们存图片的时候都是以键值对的形式存的,他的键就是url,一般情况下使用MD5对URL进行加密,这样做的目的是为了避免URL 里面有非法字符. 二次采样: 注意:二次采样分两部进行,首先第一步我们需要获取图片的宽和高,同时获取到需要采样后的宽和高,通过宽和高计算出我们需要的采样比,第二步:通过采样比让我们的图片真正实现采样缩放. 案例如下: 第一步:假如说我有一张图片是200*200,那么我想把这张图片的缩略图显示在一个50*50的ImageView上,那我的压缩比例应该为4,(这就是我们第一步的操作了,我先加载图片的边界到内存中,这个加载操作并不会耗费多少内存) 第二步:在第一次采样的基础上,我来进行二次采样。二次采样的时候,我把第一次采样后算出来的结果作为一个参数传递给第BitmapFactory,这样在加载图片的时候系统就不会将整张图片加载进来了,而是只会加载该图片的一张缩略图进来,这样不仅提高了加载速率,而且也极大的节省了内存,而且对于用户来说,他也不会有视觉上的差异 具体代码如何实现: 第一次采样:首先获取new BitmapFactory.Options()获取option对象, inJustDecodeBounds设置为true只会加载图片的边框进来,并不会加载图片具体的像素点,通过BitmapFactory.decodeFile(filePath, options);来进行第一次加载图片,通过outWidth原图的宽度,通过outHeight获取原图的高,接下来通过控件的宽度和控件的高度来获取一个采样率sampleSize,接下来进行第二次采样设置inJustDecodeBounds为false,同时设置缩放比,设置inPreferredConfig的图片的图片格式有(分别为ALPHA_8,RGB_565,ARGB_4444,ARGB_8888),最后进行图片的加载. 具体实现代码:  BitmapFactory.Options options = new BitmapFactory.Options();// 第一次:设为true时,仅仅得到边界,即宽高 options.inJustDecodeBounds=true; Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(),options); // 第二次:将options的值设为Config.RGB_565,会比默认的Config.ARGB_8888减少一半内存; options.inPreferredConfig= Bitmap.Config.RGB_565;// 将边框缩减到原来宽高的1/100; options.inSampleSize=Math.max(options.outWidth,options.outHeight)/100;// 设置为false,表示不仅仅加载边框, options.inJustDecodeBounds=false;

bitmap=BitmapFactory.decodeFile(file.getAbsolutePath(),options)

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,910
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,435
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,250
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,061
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,693
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,731