首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Imageloader-ImageLoader中的变量

我们思考下 Imageloader类中需要维护的变量 使用内存缓存 ,肯定需要LruCache ,其中LruCache中key保存的是图片的路径,value则对应相应的图片 。这是缓存的核心类。...多线程并发,使用线程池 Executor接口,可以接受用户自定义的线程数,当然了提供默认的线程数。 图片加载策略,目前涉及两种LIFO FIFO,枚举类型,提供默认的加载策略。...任务队列,使用LinkedList 中实现,因为我们要从队列中移除队首或者队尾的数据,对于需要快速插入,删除元素,应该使用LinkedList。...任务队列中的 是Runnable对象,即我们的Task任务。.../** * 图片缓存的核心类 key为图片的路径 value为图片 */ private LruCache mLruCache ; /** * 线程池

19210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Imageloader-总体简介

    本文将追随鸿阳大神仿微信图片加载的案例,记录学习的过程。...效果图参考微信 加载图片应满足一下三个目标 避免OOM 用户操作UI尽可能的流畅 选择适当的图片加载策略 避免OOM A.根据图片的显示大小压缩图片 B.使用缓存 LruCache UI操作流畅...: A.在获取图片的过程中避免耗时操作,主要通过异步加载+回调显示完成。...图片加载策略: LIFO FIFO 解释: 第一种是one by one ,按顺序一张一张的加载,即我们说说的先进先出 FIFO,这种方式虽然也可以通过监听屏幕的高度内所有图片的数量来实现优先加载当前屏幕内的图片...第二种 是拖动到哪里,哪里的图片优先显示,即我们说的后进先出LIFO。

    27340

    Imageloader-mUIHandler的初始化

    UIHandler的初始化我们并没有在init()初始化,考虑到逻辑性和合理性,我们在加载图片的时候进行初始化UIHandler。...思考下,loadImage() 方法,需要根据图片路径,将对应的图片设置到ImageView中,所以loadImage()方法有2个入参,String path 和 ImageView imageView...根据我们的策略:加载图片首先从缓存中查找,如果找到直接返回回调UIHandler的handleMessage()设置图片,如果缓存中没有则开启任务去加载图片并添加到缓存。...// 比如换到第二屏的时候,path已经改变,但imageView是复用的,所以要判断下是否相等 if(imageView.getTag().toString()...// 加载图片 TODO } }); } } /** * 为了防止错乱,不能够直接使用

    19210

    手写图片缓存框架 ImageLoader

    所以,我们在ImageLoader中只需要暴露一个方法loadImage(),外部只需要调用这个方法就可以完成图片缓存的所以逻辑 //加载图片到对应的控件 public void loadImage(String...)); return bitmap; } return null; } 在内存中,我使用了一个LinkedHashMap private static LinkedHashMap...()方法内部如果返回true,会默认移除掉最旧的一个成员,返回false表示不移除,同时还会把图片放入到手机本地中,这个逻辑通过diskCache()方法实现的,这里图片在本地中名字使用md5加密后的名字...) { e.printStackTrace(); } } } } 如果本地和内存都没有的话,那么就从网络进行获取,这里使用了...imageLoader = ImageLoader.getmInstance(this); imageLoader.loadImage(url,imageView); } }

    86520

    ImageLoader 相关知识点

    如果需要将图片转成Bitmap对象加载到内存中,就需要使用BitmapFactory类。BitmapFactory跟据图片数据源的不同,提供了几类获取Bitmap的方法。...所以,在使用这个方法控制的内存的时候 通过inDensity来控制,这样就不需要额外修改bitmap的density。...deprecated since api 14 ARGB_8888 4 最高画质,建议使用,空间使用最多 RGB_565 2 颜色相对丰富,适合不做透明处理的图像 Bitmap.CompressFormat...它是用强引用控制的缓存。可以设置缓存的大小,个数。可以统计命中率,读写次数。它是线程安全的。从做缓存的角度来说,要比WeakHashMap要好很多。 api 12 以上可以直接使用。...它是推荐给开发者使用的文件缓存的类。从名称上很好理解,文件系统中的Lru缓存。它的源码地址。 它的原理 利用LinkedHashMap在内存中记录文件缓存的最近访问顺序。

    56910

    Imageloader-获取图片需要显示的大小

    说一下通过线程加载图片的过程: 首先根据ImageView获得适当的压缩的宽和高 然后计算inSampleSize,用于压缩图片 接着将图片添加到缓存 最后mUIHandler发送消息更新图片。...第一步 根据ImageView获得适当的压缩的宽和高 因为要获取到压缩的宽和高,方法只能返回一个值,所以我们可以采用内部类的方式将宽和高设置为变量,返回此类的对象即可。.../** * 压缩的宽和高 */ private class ImageSize{ int width ; int height; }...计算压缩的宽和高的方法 /** * 根据imageView获取适当的压缩的宽和高 * @param imageView */ private ImageSize...imageSize.height = height; return imageSize; } /** * 为了兼容低版本,没有采用@Target()的方式

    70730

    《Android源码设计模式》学习笔记之ImageLoader

    ,优先使用内存加载,如果无再使用SD卡缓存 以上代码修改虽然增加了SD卡缓存,但是为了节省用户的流量及加载速度我们应该设计成优先使用内存加载,如果无再使用SD卡缓存。...,对扩展开放,这样以后有新需求的时候我们就可以使用扩展的方法来实现。...// 使用内存缓存 imageLoader.setmImageCache(new MemoryCache()); // 使用SD卡缓存 imageLoader.setmImageCache...使用自定义的图片缓存 imageLoader.setmImageCache(new ImageCache() { @Override public...当用户需要增加一种新的缓存策略时,我们只需新建一个实现ImageCache接口等待类就可以了,这样就实现了千变万化的缓存策略,并且新扩展的策略不会影响导致ImageLoader类的修改,这正是体现了“对修改关闭

    61130

    面向对象六大原则----imageLoader为例层层优化

    * 软件中的对象(模块,类,函数)应该对于扩展是开放的,但对于修改是封闭的 * 3. * 首先,缓存应该优先使用内存缓存,如果内存缓存没有再使用SD卡缓存,如果SD卡也没有才去网络获取。...* 为了使imageloader不臃肿,每次不必都更改imageloader,增加可扩展性,所以我们在设计的时候就应该考虑到 * 通过扩展的方式来实现变化,而不是通过每次来更改imageLoader...* 通过setImageCache()方法注入不同的缓存实现,这样不仅能够使Imageloader更简单,健壮。...* 当需要新建一个实现ImagerLoader接口的类,通过setImageCache注入到ImageLoader中。...*/ 里氏替换原则(LSP) 定义:所有引用基类的地方必须能透明的使用子类的对象 核心:里氏替换原则核心是抽象,抽象有依赖于继承 优点:①代码重用,减少创建类 ②子类父类像

    41930

    Android dependencies 基础知识

    由于Glide4.0与Glide2.0包名相同,项目组只能使用一个。一般面对重复包含的问题,我们会使用provided。...这样我们自己的库,就只在编译时用一下Glide2.0的接口,Glide2.0本身的实现没有包含进去。到真正运行时,我们的库使用Glide4.0的实现。 仔细想想,这样肯定也是有问题的。...当我们使用这样的方式引入库时,我们不会将第三方依赖的实现加入到我们的自制库中。我们只在编译时使用了第三方依赖。 当项目使用我们的自制库时,需要自行加入我们的第三方依赖,以保证其在运行时的正确运行。...这个非常适用于,当我们的自制库想要使用一些特定的,普遍的通用库时。 runtimeOnly 当使用runtimeOnly时,我们在编译期无法使用这个依赖,但却将它的内容带进了包,运行时可以使用。...这个使用比较少,不展开。 Dependency with flavors 我们也可以根据不同的flavors使用不同的依赖。 android { ...

    2.7K20

    基于Glide的二次封装

    先看一下本人封装后的基本使用样式: ImageLoader.with(this) .url("http://img.yxbao.com/news/image/201703/13/7bda462477...使用者只需要关心ImageLoader就好了,就算里面封装的库更换、更新也没关系,因为对外的接口是不变的。...你所关心的类–ImageLoader ImageLoader是封装好所有的方法供用户使用的,让我们看看都有什么方法: ImageLoader.init(Context context) //初始化...总结 总结一下,其实主要思路就是在GlobalConfig中选择使用哪一个图片加载库,然后将使用者的所用设置信息保存在SingleConfig中,然后在具体的Loader中去实现,本文使用的Glide,...到这里我们的封装就结束了,就可以愉快的使用了,欢迎大家提出意见与建议。

    1.2K10

    Android Volley 源码解析(三),图片加载的实现

    ,指定为 0 的话,表示不管图片有多大,都不进行压缩 5、指定图片的属性,Bitmap.Config 下的几个常量都可以使用,其中 ARGB_8888 可以展示最好的颜色属性,每个图片像素像素占 4 个字节...; 1.2 ImageLoader 的用法 ImageLoader 其实是对 ImageRequest 的封装,它不仅可以帮我们对图片进行缓存,还可以过滤掉重复的链接,避免重复发送请求,因此 ImageLoader...最后重点来了,ImageLoader 的 get() 方法是 ImageLoader 类最复杂的方法,也是最核心的方法,我们一起来看看吧: public ImageContainer get(String...mRunnable, mBatchResponseDelayMs); } } 四、NetworkImageView 源码解析 ---- NetworkImageView 是一个内部使用...ImageLoader 来进行加载网络图片的自定义 View,我们在上面提到,NetworkImageView 的使用方法主要分为四步: 1、创建一个 RequestQueue 对象 2、创建一个

    85520

    Android Volley完全解析(二),使用Volley加载网络图片

    ImageLoader也可以用于加载网络上的图片,并且它的内部也是使用ImageRequest来实现的,不过ImageLoader明显要比ImageRequest更加高效,因为它不仅可以帮我们对图片进行缓存...当然,如果你想对图片的大小进行限制,也可以使用get()方法的重载,指定图片允许的最大宽度和高度,如下所示: imageLoader.get("http://img.my.csdn.net/uploads...虽然现在我们已经掌握了ImageLoader的用法,但是刚才介绍的ImageLoader的优点却还没有使用到。为什么呢?...好了,就是这么简单,现在重新运行一下程序,你将看到和使用ImageLoader来加载图片一模一样的效果,这里我就不再截图了。...这时有的朋友可能就会问了,使用ImageRequest和ImageLoader这两种方式来加载网络图片,都可以传入一个最大宽度和高度的参数来对图片进行压缩,而NetworkImageView中则完全没有提供设置最大宽度和高度的方法

    1.3K60
    领券