Android分析加载图片

android应用图片加载与存放目录分析 分析Activity内应用框架加载图片流程,图片存放目录测试和优化,图片加载优化。 阅读详情

一、ListView加载图片

1)Android加载图片的几种方式
缓存、SDCard、网络

二、ListView自身优化

         1》当快速滑动时不去加载图片。

       方案一:
                 异步下载图片,我每页有20条,也就是20张图片,会导致listview滑动卡顿!
                 了解   public   void  onScrollStateChanged(AbsListView view,  int  scrollState) 方法// //list停止滚动时加载图片
                  pageImgLoad(_start_index, _end_index);  //分页
                  public   void  onScroll(AbsListView view,  int  firstVisibleItem,                                                  int  visibleItemCount,  int  totalItemCount) 
      方案二:
通过listview中传入的参数去判断滑动的速度。
 如果速度达到一个临界值,是不需要去加载图片的;如果没有则需要去加载图片。
           方案三:
        			慢的话:
有个延迟加载数据的方法,在API的demo中。

要是让ListView滚动速度快的话,你可以这样告诉他:

让他的手指在屏幕上迅速的上下滑动,当他的手指移动速度达到100px/0.1秒后,就可以看到快速滑动的效果了!~
	方案四:
   
ListView的右边滚动滑块启用方法? 
很多开发者不知道ListView列表控件的快速滚动滑块是如何启用的,其实辅助滚动滑块只需要一行代码就可以搞定,如果你使用XML布局只需要在ListView节点中加入  android:fastScrollEnabled="true" 这个属性即可,而对于Java代码可以通过myListView.setFastScrollEnabled(true); 来控制启用,参数false为隐藏。 
还有一点就是当你的滚动内容较小,不到当前ListView的3个屏幕高度时则不会出现这个快速滚动滑块,该方法是AbsListView的基础方法,可以在ListView或GridView等子类中使用快速滚动辅助。 

三、加载的图片优化

                简单的查看listview中的自带的缓存机制,当我们把第一屏显示的条目加载完成以后,listview中getView方法会缓存一些条目。同时我们在getView方法中尽量减少
findViewById()的次数,findViewById()是一个耗时的操作,因为这个操作需要每次到布局文件中查找文件。一般我们使用holder来达到软引用的效果,同时复用View信息。
在一般的系统应用源码中在首次加载应用的时候就开始把主要的程序先启动或者先获得对象并进行布局。
我们自己一般喜欢把数据加载到内存里面,在处理数据的时候,直接从内存中取出。


系统应用有一个Gallery,Gallery对图片的大小进行了优化.

方法一、

①在加载图片之前使用BitmapFactory.Options  options = new BitmapFactory.Options();

//将options.inJustDecodeBounds设置为true;这样不会去解析图片,只解析边界,即宽高

②BitmapFactory.decodeFile(jpgPath, options);

③读出图片的真实高度

④如果图片的真实宽高都小于设置的临界值,则需要使用真实的宽高


方法二、

方法一在一定程度上牺牲的图片的质量,但可以避免OOM Error。

当Android设备中较大图片时,可以创建一个临时空间,将载入的资源放到临时空间。

bfOptions.inTempStorage=newbyte[12 *1024];//创建了一个12kbde临时空间

一般我们喜欢在静态方法中
static {
mOptions.inDither = false;// 设置为false,将不考虑图片的抖动值,这会减少图片的内存占用
mOptions.inPurgeable = true;// 设置为ture,表示允许系统在内存不足时,删除bitmap的数组。
mOptions.inInputShareable = true;// 和inPurgeable配合使用,如果inPurgeable是false,那么该参数将被忽略,表示是否对bitmap的数组进行共享
}
方法三、
我们可以再getView方法中给ImageView设置图片时,使用LruCache先到imageUrl存入缓存,同时在listview中设置bitmap,如果通过imageCache取不到bitmap
就从新从网络获取图片。
LRUCache
        当ListView加载了某些图片被系统回收以后,用户再次滑入屏幕这种情况。这时重新去加载一遍刚刚加载
过的图片无疑使性能的瓶颈,这时我们可以使用LRUCache对图片进行缓存或者其他优化。
        LruCache类在Android-support-v4的包中提供,这个类非常适合缓存图片,他的主要算法原理是把最近使用的对象
用强引用存储在LinkedHashMap中,并且把最近最少使用的对象在缓存值达到设定值之前从内存中移除。
        
        如何选择合适的缓存大小给LruCache?
        1》你的设备可以为每一个应用程序分配多大的内存?
        2》设备屏幕上一次最多能显示多少张图片?有多少图片需要进行预加载,因为
有可能很快也会显示在屏幕上?
        3》图片的尺寸和大小,还有每张图片占据多少内存空间?
        4》图片被访问的频率有多高?

对LruCache的使用案例:
        //获取到可用内存的最大值,使用内存超出这个值会引起OutOfMemory异常。
        //LruCache通过构造函数传入缓存值,以kb为单位
        int  maxMemory = (int) (Runtime.getRuntime.maxMemory()/1024);
        //使用最大可用内存值的1/8作为缓存的大小。
        //复写LruCache中的sizeOf()方法  默认返回图片数量
        //当向 ImageView 中加载一张图片时,首先会在 LruCache 的缓存中进行检查。如果找到了相应的键值,则会立刻更新ImageView ,否则开启一个后台线程来加载这张图片。
        



四、特殊复杂布局的特殊处理

五、ImageLoad加载

1)加载图片
            ①先判断view是否为null,同时url不能为null
            ②先判断view是否为null,把控件和图片的url进行绑定,因为加载是一个耗时的操作,等加载完毕了需要判定该控件是否和url匹配.
            ③从内存加载图片(loadFromMemory(url))
/*内存加载图片*/
	public static  Drawable  loadFromMemory(String url){
	                  Drawable  drawable = mDrawableCache.get(url);
	                  if(drawable!=null){
	                          //从内存中获取到了,需要重新放到内存队列的最后,以便满足LRC
	                          //一般缓存算法有两种,第一是LFU,按使用次数判定删除优先级,使用次数最少的最先删除
	                          //还有一个就是LRC,就是按最后使用时间来判定删除的优先级,最后使用时间越早最先删除
	                          mKeyCache.remove(url);
	                          mDrawableCache.remove(url);
                     //如果大于等于100张,或者图片的总大小大于应用总内存的四分之一先删除前面的
	                  }
	   }
 // mKeyCache.add(url);//添加 mDrawableCache.put(url,drawable); mTotalSize += DrawableUtils.getDrawableSize(drawable); }}
 
            ④从内存读取到了Drawable后;如果内存中加载到了,直接设置图片
            ⑤从内存中没有读取到;(设置默认图片)从网络加载,并异步加载.   
            ⑥异步加载
                        //创建一个Runnable封装执行过程
                        //先从本地设备中加载
                        一、根据路径采取流程的形式读取进来,
                        二、把读取到图片放入缓冲中
                                    //从网络加载图片
                        一、把网络下载保存到本地
                        二、关闭网络
                        三、进行改名
                        四、从本地加载

六、处理实际开发遇到的问题

一、图标错位了
               ①在load图片是把url设置到tag中
               ②保存到缓存中时,取出ImageView中的tag,然后判断tag中的url和传入的url是否一致
               ③因为第一次加载图片的时候,我们设置了url,在我们滑动listView的时候,
               复用image时候,传入的url有可能是复用的url,导致这两个url不相同。----》同时出现了图片的错位的现象

总结的思维导图
图片预加载loading 站点实现预加载loading,但指定区域中图片未加载完,则实现自定义小图标,图片加载完后进入真正内容 立即下载

相关推荐

血管分割中的直径平衡难题:从clDice到cbDice的演进与实践

本文探讨了血管分割中的直径平衡难题,详细分析了从clDice到cbDice的技术演进与实践。通过引入半径感知权重和边界对齐惩罚,cbDice在保持拓扑完整性的同时提升了几何敏感度,显著改善了细小血管的分割效果。文章还分享了在nnU-Net中实现cbDice的工程细节,包括GPU加速骨架提取和多任务损失组合策略,为医学影像分析提供了重要参考。

weixin_29170327的博客 243

Android启动预先加载图片

现在很多的应用中都有这样一个效果

confusion_ct的专栏 1574

从收音机到Arduino:手把手教你用BJT三极管搭建一个简易音频放大器(附电路图与元件清单)

本文详细介绍了如何使用BJT三极管搭建简易音频放大器,涵盖电路原理、元件选择、设计步骤及调试技巧。通过实践项目帮助电子爱好者深入理解BJT的放大特性,并提供与Arduino结合的扩展应用方案,适合创客和DIY玩家。

aitie1479的博客 443

java|android加载src路径下面的图片文件

//我把a.jpg和MainActivity 放在同一个路径下面 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Context context = getApplicationContext();

codehxy的专栏 4013

手把手教你配置RK3588的FFmpeg+RKmpp:从解码到RGA转换的完整避坑指南

本文详细介绍了在RK3588平台上配置FFmpeg+RKmpp进行硬件解码和RGA图像处理的完整流程,包括环境准备、DRM Prime解码输出实战、RGA硬件加速转换技巧以及全链路性能调优。通过具体代码示例和问题排查指南,帮助开发者高效实现视频处理流水线,显著提升性能并降低CPU占用率。

weixin_28366475的博客 475

Ta-Lib源码解析(三):蜡烛图指标 (Candlestick Indicator) #(附Python重构代码和示意图)(补充中)

蜡烛图指标为识别K线形态的指标,笔者认为重点在于定义方式所提供的思路,背后的投资逻辑可以借鉴但不建议直接参考文档的翻译内容和源码逻辑存在不一致的现象,笔者分别列出中文百科中的定义和源码实际逻辑,供大家参考技术分析理论中的一些模糊词,ta-lib中给出了精确的定义源码

量化就是探索生活 3254

安卓经验分享——图片加载

图片加载框架有很多,这里只对比了我开发以来用到的几款图片加载框架(其他的加载框架没用过没有发言权)。其他博主文章中列举了很多对比项,我只列举出几个重要的项。我目前仍在用的是Glide,原因很简单:该工具仍在维护、配置灵活、功能完整,耦合度相对较低方便进行封装。不过后续的开发中,我可能会将Coil纳入备选,Coil是一个新的开发图片加载库,也是google力推的工具之一。

lifeidroid的专栏 996

手把手教你用EGM96模型校正DEM数据(含在线工具推荐)

本文详细介绍了如何使用EGM96地球重力场模型校正DEM数据中的高程偏差。通过对比WGS84椭球面与大地水准面的差异,解释了校正原理,并提供了从在线工具快速验证到Python脚本批量处理的全流程实战指南,帮助GIS开发者和数据分析师确保高程数据基准一致,提升空间分析精度。

ttt77的博客 1008

Android图片加载机制

1.Android系统支持4种格式的色彩格式 源码在Bitmap.Config中,如下图: .Alpha8:只有一个alpha通道,每个像素占1个字节(Byte) .Rgb565:只有RGB3个通道,没有alpha通道,R(红)G(绿)B(蓝) 分量分别使用5位、6位、5位,没有透明度,所以一个像素点占 16 位,也就是 2 字节。 .Argb8888:ARGB 分量都是8 位,ARGB 分量都是8 位,所以一个像素点占 32 位,也就是 4 字节,它是最能保证图片效果的一种模式 .系统...

qq_37159335的博客 1333

RLC电阻电容电感基础知识——电感篇

电感 等效电路 电感线圈由铜导线绕制,等效电路如图所示。 寄生电阻RS,包括了绕线电阻、引脚串联电阻以及磁芯损耗电阻三部分组成,其中绕线电阻与线径、长度、铜线电阻率有关;引脚电阻与引线长短、粗细有关;磁芯损耗电阻与磁芯材料特性有关,显然磁芯损耗电阻还与工作频率有关.寄生电容C主要是绕线圈与圈之间的杂散电容(为PF级),与绕线工艺有关。 等效导纳 显然: (1)当角频率ω(频率f)较小时,呈电感性. (2)当角频率ω等于ω0时,导纳Y虚部为0,呈现电阻性,即发生共振。令导纳Y虚部为0,即可求出共振角频率ω

azj2019的博客 1万+

编译原理考试大题分析【太原理工大学】

看完本篇大题拿 85% 的分应该没问题,TYUT 太原理工大学编译原理期末考试。

m0_52861684的博客 1万+

android图片资源加载失败,Android图片加载问题分析

下图是一个客户端图片加载模块常见的处理流程。imagepipeline.png本文以UniversalImageLoader为例分析了这一流程,然后分析了Fresco的优势和问题,最终推荐大家使用Glide。从UniversalImageLoader分析图片加载中需要处理的问题网络主要用于下载网络图片,在UIL中是将图片地址变为InputStream。UIL支持多种类型来源的图片显示,包括:网络文...

weixin_33060757的博客 2390

Kappa函数:测量一致性并计算置信区间的R语言包

Kappa函数是一种常用的统计量,用于衡量两个评估者之间的一致性。在R语言中,有一个名为"vcd"的包提供了计算Kappa函数以及相应的置信区间的功能。本文将介绍如何使用"vcd"包来计算Kappa函数的值,并进一步计算置信区间。Kappa函数的值介于-1和1之间,值越接近1表示评估者之间的一致性越高,值越接近-1表示评估者之间的一致性越低,值接近0表示评估者之间的一致性接近于随机。通过以上步骤,我们成功地使用R语言中的"vcd"包计算了Kappa函数的值和置信区间。接下来,我们可以使用"vcd"包中的。

2301_79331230的博客 1876

android图片资源加载失败,Android图片加载库Picasso源码分析

图片加载在Android开发中是非常重要,好的图片加载库也比比皆是。ImageLoader、Picasso、Glide、Fresco均是优秀的图片加载库。以上提到的几种图片加载库各有特色。用法与比较,网上已经很多了。出于学习的角度,个人认为从Picasso入手较好。代码量小,同时API优美,很适合我们学习。今天笔者就Picasso的源码进行分析,抛出一些图片加载的技术细节供园友参考。PS:建议园友...

weixin_30388485的博客 464

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

android 异步图片加载 开源,异步加载图片BitmapFun分析

博客地址:http://my.oschina.net/lifj/blog/313866--------2014年8月19日BY拉风的道长开源项目地址项目简介如果图片资源是静态的,当我们要在View上显示图片时,只需要简单的将图片赋值给ImageView就可以了,但如果需要浏览网络上的图片时该如何做呢?有可能图片很大,有可能网速很慢并且不稳定,这种情况下该如何增加用户体验。Android官方的Bi...

weixin_32655655的博客 279

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

android图片资源加载完成,Android加载图片占用内存分析

本文首发于 vivo互联网技术 微信公众号链接:作者:Xu Jie不同Android版本,对一张图片的内存处理方式是不一样的,使用不正确会导致OOM的发生,这篇文章带你梳理内存占用情况,选择适合你的图片加载模式,解决OOM问题。一、背景你知道吗一张5.48MB,宽高像素为4896*6528的24位的静态图片,放在Android工程目录下面的res/drawable-[density]/ 不同文件夹...

weixin_42523529的博客 335

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android 加载图片占用内存分析

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/aRDzmMlkqB14Ty67GJs9vg 作者:Xu Jie 不同Android版本,对一张图片的内存处理方式是不一样的,使用不正确会导致OOM的发生,这篇文章带你梳理内存占用情况,选择适合你的图片加载模式,解决OOM问题。 一、背景 你知道吗 一张5.48MB,宽高像素为4896*6528的24位的静态图片,放在Android工程目录下面的res/drawable-[density..

vivo互联网技术 512

Android获取图片内存大小,Android 加载图片占用内存分析

本文首发于 vivo互联网技术 微信公众号链接:作者:Xu Jie不同Android版本,对一张图片的内存处理方式是不一样的,使用不正确会导致OOM的发生,这篇文章带你梳理内存占用情况,选择适合你的图片加载模式,解决OOM问题。一、背景你知道吗一张5.48MB,宽高像素为4896*6528的24位的静态图片,放在Android工程目录下面的res/drawable-[density]/ 不同文件夹...

weixin_39944515的博客 819

android bitmap 保存到本地_Android 加载图片占用内存分析

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/aRDzmMlkqB14Ty67GJs9vg作者:Xu Jie不同Android版本,对一张图片的内存处理方式是不一样的,使用不正确会导致OOM的发生,这篇文章带你梳理内存占用情况,选择适合你的图片加载模式,解决OOM问题。一、背景你知道吗一张5.48MB,宽高像素为4896*6528的24位的...

weixin_39612038的博客 492

Android图片加载框架分析之Glide、Picasso和Fresco

版权声明:本文为博主原创文章,未经博主允许不得转载。 由于手机APP不断地增多,使得APP的流畅度和缓存功能越来越受到重视。APP与用户的交互主要是在文字、图片和视频居多。那么图片的显示和加载尤为重要,好的图片显示和加载可以更好地留住用户。现在来分析一下当下流行的APP开发中的图片加载的方式。主要图片加载方式:Glide、Picasso、Fresco主要分析的功能点:优缺点、具体使用、库的大Glide

collorye的博客 1407

android图片加载过程,从源码分析Android的Glide库的图片加载流程及特点

易采站长站为您分析从源码分析Android的Glide库的图片加载流程及特点,Glide库是Android下一款人气很高的多媒体资源管理库,特别是在处理gif加载方面受到众多开发者青睐,需要的朋友可以参考下0.基础知识Glide中有一部分单词,我不知道用什么中文可以确切的表达出含义,用英文单词可能在行文中更加合适,还有一些词在Glide中有特别的含义,我理解的可能也不深入,这里先记录一下。(1)V...

weixin_39871649的博客 124

Android图片加载库架构设计对比分析

Android图片加载库架构设计对比分析 本文对比了三种Android图片加载库的设计方案:通用架构、Picasso和Glide。通用架构采用分层设计,功能完整但复杂度高;Picasso以简洁著称,采用中心化调度,适合快速开发;Glide由Google推荐,模块化设计,功能强大且性能优异,适合企业级应用。分析从架构理念、核心模块、使用示例到优缺点对比,为开发者提供技术选型参考。结论指出:简单场景选Picasso,功能需求多选Glide,特殊定制考虑通用方案。

哈哈龙的博客 709

android图片异步加载图片,Android 异步加载图片分析总结

研究了android从网络上异步加载图像,现总结如下:(1)由于android UI更新支持单一线程原则,所以从网络上取数据并更新到界面上,为了不阻塞主线程首先可能会想到以下方法。在主线程中new 一个Handler对象,加载图像方法如下所示private void loadImage(final String url, final int id) {handler.post(new Runnab...

weixin_32562455的博客 1192

内存占用_Android 加载图片占用内存分析

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/aRDzmMlkqB14Ty67GJs9vg作者:Xu Jie不同Android版本,对一张图片的内存处理方式是不一样的,使用不正确会导致OOM的发生,这篇文章带你梳理内存占用情况,选择适合你的图片加载模式,解决OOM问题。一、背景你知道吗一张5.48MB,宽高像素为4896*6528的24位的...

weixin_42099633的博客 327

Android 加载无后缀图片,Android 图片加载之原理分析

android加载图片需要哪些优化?首先,大家应该知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常,在一个很小的ImageView上显示一张超大的图片不会带来任何视觉上的好处,但却会占用我们相当多宝贵的内存,而且在性能上还可能会带来负面影响。因此在展示高分辨率图片的时候,最好先将图片进行压缩当你需要在界面上加载一大堆图片的时候,需要频...

weixin_29061465的博客 478

android 图片 硬盘大小 内存占用,Android 加载图片占用内存分析

不同Android版本,对一张图片的内存处理方式是不一样的,使用不正确会导致OOM的发生,这篇文章带你梳理内存占用情况,选择适合你的图片加载模式,解决OOM问题。一、背景你知道吗一张5.48MB,宽高像素为4896*6528的24位的静态图片,放在Android工程目录下面的res/drawable-[density]/ 不同文件夹下面,占据的内存是多少?使用Glide加载一张5.48MB,宽高像...

weixin_42487737的博客 442
上一篇: 激励自己
下一篇: 面向对象编程(OOP)
linuxMinx
博客等级 码龄15年 195粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值