Android Listview 性能优化

首先我一般使用的适配器是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*50ImageView上,那我的压缩比例应该为4,(这就是我们第一步的操作了,我先加载图片的边界到内存中,这个加载操作并不会耗费多少内存)
 
第二步:
在第一次采样的基础上,我来进行二次采样。二次采样的时候,我把第一次采样后算出来的结果作为一个参数传递给第BitmapFactory,这样在加载图片的时候系统就不会将整张图片加载进来了,而是只会加载该图片的一张缩略图进来,这样不仅提高了加载速率,而且也极大的节省了内存,而且对于用户来说,他也不会有视觉上的差异
 
具体代码如何实现:
 
第一次采样:首先获取new BitmapFactory.Options()获取option对象, inJustDecodeBounds
设置为true只会加载图片的边框进来,并不会加载图片具体的像素点,通过BitmapFactory.decodeFile(filePath, options);来进行第一次加载图片,通过outWidth原图的宽度,通过outHeight获取原图的高,接下来通过控件的宽度和控件的高度来获取一个采样率sampleSize,接下来进行第二次采样设置inJustDecodeBoundsfalse,同时设置缩放比,设置inPreferredConfig的图片的图片格式有(分别为ALPHA_8RGB_565ARGB_4444ARGB_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)

转载于:https://www.cnblogs.com/fanzhiguo/p/6023450.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端:JS实现数组去重常用的六种方法介绍

今天给大家分享JS实现数组去重常用的六种方法&#xff0c;希望对大家能有所帮助&#xff01;定义变量let arr [20,6,13,20,100,8,13,11]; let newArr [];1、两层循环去重 for(let i 0;i < arr.length;i){for(let j i 1;j < arr.length;j){if(arr[i] arr[j]){arr.sp…

python自定义colorbar_python可视化 matplotlib画图使用colorbar工具自定义颜色

python matplotlib画图使用colorbar工具自定义颜色 colorbar(draw colorbar without any mapple/plot)自定义colorbar可以画出任何自己想要的colorbar&#xff0c;自由自在、不受约束&#xff0c;不依赖于任何已有的图(plot/mappable)。这里使用的是mpl.colorbar.ColorbarBase类…

不能读取文件“itunes.library.itl”因为它是由更高级别的itunes所创建的

转自&#xff1a;https://zhidao.baidu.com/question/80796363.html 是因为你安装过高版本的后又装你版本的itunes. 你在电脑上搜索所有硬盘上的itunes library.itl这个文件.搜到就删了&#xff0c;而且搜索里选择“高级选项”除了区分大小写其它几个都钩上。这样注消下&#x…

路由器:什么是软路由,看完本篇文章你就懂了

今天小编给大家介绍一下软路由具体是什么&#xff0c;有什么实际用途&#xff0c;看完本篇你就懂了&#xff01; 一、软路由与硬路由概念介绍 硬路由&#xff1a;目前我们家里普遍使用的路由器&#xff0c;有厂家提供整体的解决方案&#xff0c;包括处理器、电源供应、嵌入式软…

c#form+mysql储存读取图片_C#从SQL server数据库中读取l图片和存入图片

本实例主要介绍如何将图片存入数据库。将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStream类、BinaryReader把图片读成字节的形式,赋给一个字节数组,然后用ADO.SqlCommand对象的ExecuteNonQuery()方法来把数据保存到数据库中。主要代…

if...else..的错误用法

1.最近在写js代码完成一个前段DOM操作的函数时&#xff0c;自己错误的使用了if..else..控制体。为什么是错误的呢&#xff1f;看看我的 代码你就明白了&#xff1a; 1 document.getElementsByClassName(eButton)[0].οnclickfunction(){2 var checkeddocument.getElementsB…

Git服务器报错:host key for (ip地址) has changed and you have requested strict checking

一:报错提示 如下&#xff1a; WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key …

软件:常用 Linux 软件汇总,值得收藏

目录 1、音频软件 2、聊天软件 3、数据备份与恢复 4、桌面个性化工具 5、开发必备 6、 电子书工具 7、 编辑器软件 8、教育软件 9、电子邮件软件 10、文件管理器 11、娱乐游戏 12、 图形工具 13、互联网浏览 14、 办公效率工具 15、 生产力效率工具 16、 安全防护 17、文件共享…

java上下文即ServletContext

上下文即ServletContext,是一个全du局的储存信zhi息的空间&#xff0c;服务器启动&#xff0c;其就dao存zhuan在&#xff0c;服务器关闭&#xff0c;其才释放。 所有用户共用一个ServletContext。所以&#xff0c;为了节省空间&#xff0c;提高效率&#xff0c;ServletContext中…

数据帧,数据包,报文段,报文,分组,数据包的概念和区别

应用层——消息传输层——数据段(segment)网络层——分组、数据包&#xff08;packet&#xff09;链路层——帧&#xff08;frame&#xff09;物理层——P-PDU&#xff08;bit&#xff09;分组、包&#xff0c;packet&#xff0c;信息在互联网当中传输的单元&#xff0c;网络层…

python开源自动化测试平台_8款开源自动化测试框架,速速收藏

原标题&#xff1a;8款开源自动化测试框架&#xff0c;速速收藏来源&#xff1a;http://www.51testing.com/近年来&#xff0c; 自动化测试越来越热门&#xff0c;该领域新的挑战和机遇也在同步产生&#xff0c;尤其是AI&#xff0c;RPA和机器学习&#xff0c;可以预见会在几年…

SpringBoot集成Redis用法笔记

今天给大家整理一下SpringBoot集成Redis用法笔记&#xff0c;希望对大家能有所帮助&#xff01;一、Redis优点介绍1、速度快不需要等待磁盘的IO&#xff0c;在内存之间进行的数据存储和查询&#xff0c;速度非常快。当然&#xff0c;缓存的数据总量不能太大&#xff0c;因为受到…

tomcat和servlet的关系

tomcat和servlet的关系 Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器上的组件. Servlet最常见的用途是扩展Java Web服务器功能,提…

Linux常用远程连接工具介绍,总有一款适合你

目录 1、xshell 2、winscp 3、PuTTY 4、MobaXterm 5、FinalShell 今天给大家推荐Linux常用远程连接工具&#xff0c;希望对大家能有所帮助&#xff01; 1、xshell 介绍&#xff1a; xshell是一个非常强大的安全终端模拟软件&#xff0c;它支持SSH1, SSH2, 以及Windows平台的TEL…

python高性能写法_py 高性能低级,高级写法思考

这里所谓的低级&#xff0c;高级是指封装抽象的程度。低级指os.fork()高级是指 multiprocessing包一般根据业务需求&#xff0c;一个主进程负责维护接收&#xff0c; 不同的子进程处理不同的需求。根据各同需求组合多进程多线程多进程&#xff0b;多线程协程也可基于uvloop事件…

Linux远程管理协议相关知识介绍

一、什么是远程管理远程管理&#xff0c;实际上就是计算机&#xff08;服务器&#xff09;之间通过网络进行数据传输&#xff08;信息交换&#xff09;的过程&#xff0c;与浏览器需要 HTTP 协议&#xff08;超文本传输协议&#xff09;浏览网页一样&#xff0c;远程管理同样需…

使用ArcGIS JavaScript API 3.18 加载天地图

对于中国开发者在创建GIS应用的时候&#xff0c;往往比较头疼的是底图资源的缺乏。其实国家测绘地信局就提供一个很好的免费资源&#xff1a;天地图。使用ArcGIS API的开发人员可以直接利用该资源作为地图应用的底图。 ArcGIS JavaScript API最近新推出了3.18版本。所以下面示例…

潜力的监控mysql_Grafana 数据库监控平台

Grafana 数据库监控平台简介Grafanademo 地址&#xff1a;官方demo文档可以下载pdf离线阅读Percona监控和管理(PMM)是一个用于管理和监控MySQL和MongoDB性能的开源平台。它由Percona与托管数据库服务&#xff0c;支持和咨询领域的专家合作开发。PMM是一种免费的开源解决方案&am…

PC软件:推荐七款Windows下宝藏软件

目录 一、uTools 效率神器 二、Groupy 窗口切换神器 三、Revo Uninstaller 卸载神器 四、Universal Viewer 五、VectorMagic 六、QuickLook 文件预览神器 七、Bandizip 压缩神器 今天给大家推荐七款Windows下软件&#xff0c;每一个都值得拥有。 一、uTools 效率神器 一个可以帮…