nCacheUtils.getBitmapFromDiskCache(url); } /** *在主线程中执行,更新UI */ @Override protectedvoidonPostExecute(Bitmapresult){ if(result!=null&&ivPic.getTag().equals(url)){ ivPic.setImageBitmap(result); }else{ //从网络加载图片 NetCacheUtils.getInstance().getBitmapFromNet(ivPic,url); } } } 内存缓存 内存缓存使用了LRU算法(Least Recently Used),这是一种常用的页面替换算法,当内存空间不足时,最近最少使用的页面会被优先淘汰。在Android中,我们通常会使用`LruCache`类来实现内存缓存。 本地缓存 本地缓存通常是将图片存储到设备的磁盘上,比如内部存储或外部SD卡。在Android中,我们可以使用`File`类来创建和管理文件,然后使用`DiskLruCache`或者`SQLite`等持久化技术来实现图片的读写。本地缓存可以提供离线访问的能力,即使在没有网络的情况下也能显示图片。 图片压缩 图片压缩是处理大图和节省内存的关键步骤。在Android中,我们可以使用`BitmapFactory.Options`来控制图片的解码,通过设置`inSampleSize`来缩小图片的尺寸,减少内存占用。此外,还可以使用`Bitmap.createScaledBitmap()`来按比例缩放已解码的图片,或者使用`Bitmap.compress()`来以特定格式(如JPEG)压缩图片并保存到文件。 图片加载策略 在实现三级缓存时,通常会遵循以下策略: 1. 首先检查内存缓存中是否有图片,如果有则直接使用。 2. 如果内存缓存中没有,检查本地缓存,如果有则读取并放入内存缓存,然后显示。 3. 如果本地缓存也没有,从网络加载图片,同时将图片存入本地和内存缓存。 优化要点 1. 使用异步加载:避免阻塞主线程,可以使用`AsyncTask`、`Loader`或者第三方库如`Glide`、`Picasso`等进行异步加载。 2. 使用合适的图片格式:例如,对于网络图片,可以使用WebP格式,它在压缩效率上优于JPEG和PNG。 3. 延迟加载:对于列表中的图片,可以等到图片所在视图可见时再进行加载。 4. 利用软引用和弱引用:在内存缓存中使用软引用可以避免内存泄漏,而弱引用可以在内存不足时更快地释放资源。 总结 Android图片的三级缓存机制是为了高效、节省资源地加载图片,防止因加载大量图片导致的内存溢出。通过合理使用内存缓存、本地缓存和网络缓存,可以提升用户体验,同时降低网络消耗。图片压缩是节省内存的关键,合理的加载策略和优化措施能进一步提升应用性能。在实际开发中,可以借助现有的图片加载库,它们已经实现了这些功能,并提供了丰富的定制选项。
下载后可阅读完整内容,剩余3页未读,立即下载
- 粉丝: 0
- 资源: 913
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 十种常见电感线圈电感量计算公式详解
- 军用车辆:CAN总线的集成与优势
- CAN总线在汽车智能换档系统中的作用与实现
- CAN总线数据超载问题及解决策略
- 汽车车身系统CAN总线设计与应用
- SAP企业需求深度剖析:财务会计与供应链的关键流程与改进策略
- CAN总线在发动机电控系统中的通信设计实践
- Spring与iBATIS整合:快速开发与比较分析
- CAN总线驱动的整车管理系统硬件设计详解
- CAN总线通讯智能节点设计与实现
- DSP实现电动汽车CAN总线通讯技术
- CAN协议网关设计:自动位速率检测与互连
- Xcode免证书调试iPad程序开发指南
- 分布式数据库查询优化算法探讨
- Win7安装VC++6.0完全指南:解决兼容性与Office冲突
- MFC实现学生信息管理系统:登录与数据库操作