AndroidStudio利用DiskLruCache和LruCache实现简单的照片墙
来源:互联网 发布:百姓自动发帖软件 编辑:程序博客网 时间:2024/06/05 19:35
(1)主界面是一个GridView, 主要机制都实现在gridview中.
(2)核心成员
//记录下载任务
private Set<BitmapWorkerTask> taskCollection;
//内存缓存
private LruCache<String, Bitmap> mMemoryCache;
//硬盘缓存
private DiskLruCache mDiskLruCache;
(3)实现过程
<1>在adaper中对LruCache和DiskLruCache进行初始化:
// 获取应用程序最大可用内存 int maxMemory = (int) Runtime.getRuntime().maxMemory(); int cacheSize = maxMemory / 8; //134217728byte = 128M // 设置图片缓存大小为程序最大可用内存的1/8 mMemoryCache = new LruCache<String, Bitmap>(cacheSize) { @Override protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getByteCount(); } }; try { // 获取图片缓存路径 File cacheDir = getDiskCacheDir(context, "thumb"); if (!cacheDir.exists()) { cacheDir.mkdirs(); } // 创建DiskLruCache实例,初始化缓存数据 mDiskLruCache = DiskLruCache //缓存地址, 版本号(当版本号变化会自动清理缓存的), 一个key对应几个文件, 缓存容量 .open(cacheDir, getAppVersion(context), 1, 10 * 1024 * 1024);//10M } catch (IOException e) { e.printStackTrace(); }
<2>在getview中进行image关联, 先设置一个空照片, 当下载之后, 利用图片的url作为tag找个这个imageview进行更新.
imageView.setTag(url); imageView.setImageResource(R.drawable.empty_photo); loadBitmaps(imageView, url);
<3>加载图片
a.创建一个下载图片的AsyncTask<String, Void, Bitmap>, 参数是url, 空, 返回类型.
b.在这里进行图片下载, 下载的过程实际是将网上图片保存到硬盘缓存的过程,下载完成之后 将文件保存到内存缓存中, 同时将下载
任务从taskset中取出.下载成功的task不需要监控了.
c.硬盘缓存的key是图片url的hash值, 因为直接用url当文件名可能有非法字符. 内存缓存就可以直接用url当key了.
d.下载完成从内存缓存中取出image,设置到imageview上就可以了
ImageView imageView = (ImageView) mphotowall.findViewWithTag(imageUrl); if (imageView != null && bitmap != null) { imageView.setImageBitmap(bitmap); } taskCollection.remove(this); }源码下载:点击打开链接
阅读全文
0 0
- AndroidStudio利用DiskLruCache和LruCache实现简单的照片墙
- 使用lrucache和diskLrucache实现照片墙
- 完美结合LruCache和DiskLruCache实现Android照片墙
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- 【android】照片墙完整版,完美结合LruCache和DiskLruCache
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- 学习设计模式的必要性
- SPOJ-ZQUERY-分块求区间内和为0的最大长度
- Git命令
- Android ContentProvider支持跨进程数据共享与"互斥、同步"杂谈
- 【观察】探寻华为云铸就中国政务云第一品牌的“法宝”
- AndroidStudio利用DiskLruCache和LruCache实现简单的照片墙
- SharePreference原理及跨进程数据共享的问题
- mysql 字符串字段转浮点型字段
- 洛谷p1443 马的遍历
- 判断网络
- vue run dev后自动打开浏览器插件:open-browser-webpack-plugin
- Android WebView加载Chromium动态库的过程分析
- HHUOJ_1003: 数字整除
- pullrefreshdemo