在Android开发中,如果图片过多,而我们又没有对图片进行有效的缓存,就很容易导致OOM(Out Of Memory)错误.因此,图片的缓存是非常重要的,尤其是对图片非常多的应用.现在很多框架都做了很好的图片缓存处理,如[Fresco].[Glide]等. 本帖主要介绍以下Android中图片的三级缓存机制的原理及其应用.本帖中的代码都是使用Android原生的代码编写的. 1.原理 Android图片三级缓存的原理如下图所示: 可见,Android中图片的三级缓存主要是强引用.软银用和文件系…
因为之前项目同事使用了图片三级缓存,今天整理项目的时候发现同事还是使用了软引用(SoftRefrerence)和弱引用(WeakReference),来管理在内存中的缓存.看到这个我就感觉不对了.脑海中有一句之前文章出现的“因为从 Android 2.3 (API Level 9)开始,垃圾回收器会更倾向于回收持有软引用或弱引用的对象,这让软引用和弱引用变得不再可靠.” 下面这个是官方文档的截图: 点击打开链接 这是官方链接 翻译一下: 在过去,我们经常会使用一种非常流行的内存缓存技术的实现,即…
Android异步下载图片并且缓存图片到本地 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML资源,其中包括图片,我们要做的解析XML里面的数据,并且把图片缓存到本地一个cache目录里面,并且用一个自定义的Adapter去填充到LIstView,demo运行效果见下图: 通过这个demo,要学会有一下几点 1.怎么解析一个XML 2.demo中用到的缓存图片到本地一个临时目录的思想是怎样的…
紧接上文Android进阶:七.Retrofit2.0原理解析之最简流程[上] 一.请求参数整理 我们定义的接口已经被实现,但是我们还是不知道我们注解的请求方式,参数类型等是如何发起网络请求的呢? 这时我们可能应该关注一下ServiceMethod<Object, Object>对象的构建了: ServiceMethod<Object, Object> serviceMethod = (ServiceMethod<Object, Object>) loadService…
图片缓存的原理 实现图片缓存也不难,需要有相应的cache策略.这里采用 内存-文件-网络 三层cache机制,其中内存缓存包括强引用缓存和软引用缓存(SoftReference),其实网络不算cache,这里姑且也把它划到缓存的层次结 构中. 当根据url向网络拉取图片的时候,先从内存中找,如果内存中没有,再从缓存文件中查找,如果缓存文件中也没有,再从网络上通过http请求拉取图 片.在键值对(key-value)中,这个图片缓存的key是图片url的hash值,value就是bitmap.所…
最近开发电视版的云存储应用,要求”我的相册“模块有全屏预览图片的功能,全屏分辨率是1920*1080超清.UI组件方面采用Gallery+ImageSwitcher组合,这里略过,详情参见google Android API. 相册图片预取缓存策略是内存缓存(硬引用LruCache.软引用SoftReference<Bitmap>).外部文件缓存(context.getCachedDir()),缓存中取不到的情况下再向服务端请求下载图片.同时缓存三张图片(当前预览的这张,前一张以及后一张).…
废话不多说,直接上代码 package com.huge.emj.common.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.lang.ref.SoftReference; import java.util.ArrayList; import java.util.Hash…
简单介绍 在泰国举行的谷歌开发人员论坛上,谷歌为我们介绍了一个名叫 Glide 的图片载入库,作者是 bumptech.这个库被广泛的运用在 google 的开源项目中,包含 2014 年 google I/O 大会上公布的官方 app. 特点 (1)使用简单 (2)可配置度高,自适应程度高 (3)支持常见图片格式 : Jpg png gif webp (4)支持多种数据源: 网络.本地.资源.Assets 等 (5)高效缓存策略: 支持 Memory 和 Disk 图片缓存,默认 Bitmap…
retrofit 已经流行很久了,它是Square开源的一款优秀的网络框架,这个框架对okhttp进行了封装,让我们使用okhttp做网路请求更加简单.但是光学会使用只是让我们多了一个技能,学习其源码才能让我们更好的成长. 本篇文章是在分析retrofit的源码流程,有大量的代码,读者最好把源码下载下来导入IDE,然后跟着一起看,效果会更好(源码获取方式查看主页获取) 一.retrofit入门 定义网络请求的API接口: interface GithubApiService { @GET("us…