`

Android 之图片本地缓存解决方案

阅读更多
Android 之图片本地缓存解决方案
对于客户端——服务器端应用,从远程获取图片算是经常要用的一个功能,而图片资源往往会消耗比较大的流量,对应用来说,如果处理不好这个问题,那会让用户很崩溃,不知不觉手机流量就用完了,等用户发现是你的应用消耗掉了他手机流量的话,那么可想而知你的应用将面临什么样的命运。

对于图片资源来说,你不可能让应用每次获取的时候都重新到远程去下载,这样会浪费资源,但是你又不能让所有图片资源都放到内存中去(虽然这样加载会比较快),因为图片资源往往会占用很大的内存空间,容易导致OOM。那么如果下载下来的图片保存到SDCard中,下次直接从SDCard上去获取呢?这也是一种做法,我看了下,还是有不少应用采用这种方式的。采用LRU等一些算法可以保证sdcard被占用的空间只有一小部分,这样既保证了图片的加载、节省了流量、又使SDCard的空间只占用了一小部分。另外一种做法是资源直接保存在内存中,然后设置过期时间和LRU规则。

sdcard保存:

在sdcard上开辟一定的空间,需要先判断sdcard上剩余空间是否足够,如果足够的话就可以开辟一些空间,比如10M


当需要获取图片时,就先从sdcard上的目录中去找,如果找到的话,使用该图片,并更新图片最后被使用的时间。如果找不到,通过URL去download
去服务器端下载图片,如果下载成功了,放入到sdcard上,并使用,如果失败了,应该有重试机制。比如3次。
下载成功后保存到sdcard上,需要先判断10M空间是否已经用完,如果没有用完就保存,如果空间不足就根据LRU规则删除一些最近没有被用户的资源。

内存保存:

在内存中保存的话,只能保存一定的量,而不能一直往里面放,需要设置数据的过期时间、LRU等算法。这里有一个方法是把常用的数据放到一个缓存中(A),不常用的放到另外一个缓存中(B)。当要获取数据时先从A中去获取,如果A中不存在那么再去B中获取。B中的数据主要是A中LRU出来的数据,这里的内存回收主要针对B内存,从而保持A中的数据可以有效的被命中。



在这次手机应用开发中,我是将sdcard保存和内存保存两种方法结合使用:在得到图片的URL后,首先在内存中查找,没有找到,再到sd卡中查找,若还是没有找到,则开始异步下载,下载完成后,将图片同时缓存到内存与sd卡中,便于下一次快速的获取它。

采用两者结合方式,优势很明显:能在内存没有释放前,快速获取到图片,减少对sd卡的存取;sd卡缓存,又能弥补内存资源不足和长期保存的确点。

   


【推荐下朋友开的淘宝店筱夜宫主(http://xiaoyegongzhu.taobao.com/)DR.HU 胡博士美妆~坐在电脑旁的汉子姑娘注意脸部护理呀,做了程序媛,也要美丽啊。。。小店有优惠码:YE4450,报优惠码,抵两元券,(⊙o⊙)…   】   
分享到:
评论

相关推荐

    Android远程图片获取和本地缓存

    在Android应用开发中,远程图片的获取和本地缓存是一个重要的优化策略,旨在提升用户...在实际开发中,还可以利用现有的库,如 Glide、Picasso 或 Fresco,它们提供了更完善的图片加载和缓存解决方案,简化了开发过程。

    Android代码-web资源的本地缓存方案

    CandyWebCache是移动端web资源的本地缓存解决方案,能够拦截webview的请求,并优先使用本地缓存静态资源进行响应,以此来对webview加载页面性能进行优化。 特点: 协议层拦截请求,透明替换响应 静态资源版本控制及...

    Android ASimpleCache缓存本地数据

    ASimpleCache是Google的GmsCore项目中提取出来的一个轻量级、易用的本地缓存库,适用于存储小量的数据,如JSON字符串或图片的二进制数据。本文将详细介绍ASimpleCache的工作原理、使用方法以及如何在实际项目中实现...

    android 网络和本地图片加载 支持异步加载并缓存

    这是一个强大的开源图片加载库,它提供了完整的解决方案,包括异步加载、内存和磁盘缓存等功能。 1. **异步加载**:Universal Image Loader库使用了工作线程进行图片的下载和解码,避免阻塞主线程。它通过配置...

    图片3级缓存,本地图片绑定url终极解决方案,仿照csdn那个参考谷歌的例子,我增加了本地绑定.

    在这个解决方案中,我们将探讨如何实现一个类似CSDN并参考谷歌原生图片加载库(如Glide或Picasso)的本地图片绑定与三级缓存系统。 首先,我们来理解什么是"三级缓存"。在Android中,图片缓存通常分为三部分:内存...

    Android 分页缓存图片加载器,gridview显示

    在Android应用开发中,高效的图片加载对于用户体验至关重要,特别是在数据量大、页面滑动频繁的场景,...通过深入理解这些技术,开发者可以为自己的Android应用构建类似的图片加载解决方案,提升应用的性能和用户体验。

    Android加载网络图片与本地图片解决OOM问题

    一种常见的解决方案是使用第三方库,例如"Android-Universal-Image-Loader"。这个开源项目提供了一个强大的图片加载、缓存框架,能够有效地防止OOM并优化图片显示。 Android-Universal-Image-Loader库的核心功能...

    Android 图片缓存 源码+事例

    在Android应用开发中,图片加载和...总之,Android Universal Image Loader为Android应用提供了强大的图片加载和缓存解决方案,通过深入理解其源码和实践案例,开发者能够构建出性能优异、用户体验良好的图片展示功能。

    Android裁剪图片终极解决方案

    本文将深入探讨如何实现Android大图片裁剪的终极解决方案,结合提供的资源包`CropImage-Enhance`,我们将涵盖以下几个关键知识点: 1. **Bitmap的加载与内存管理** - Android中的Bitmap对象占用大量内存,处理不当...

    Android 异步加载图片缓存优化.rar

    "Android 异步加载图片缓存优化"是一个针对Android平台的解决方案,旨在提高用户体验,减少内存消耗,防止因大量图片加载导致的`OutOfMemoryError`(OOM)异常。 首先,我们要理解图片异步加载的重要性。在Android...

    Android图片下载三级缓存策略源码Demo

    "Android图片下载三级缓存策略源码Demo" 提供了一种解决方案,它利用了LruCache、软引用以及DiskLruCache来实现三级缓存机制。这种策略能够有效地减少网络请求,提高图片加载速度,同时节省设备资源。现在,让我们...

    Android中非常好图片缓存ImageCache

    这个库是由一位知名的开发者编写的,它提供了一个相对完整且系统的解决方案,尽管存在一些小缺点,但整体来说在很多场景下都能表现出色。 首先,让我们了解一下图片缓存的基本原理。在Android应用中,图片通常来源...

    Android 三大图片缓存原理、特性对比

    在Android开发领域内,Universal Image Loader、Picasso和Glide是较为知名的图片缓存解决方案。此外,Facebook还开源了Fresco这一高性能图片加载框架,但由于其还未达到1.0稳定版阶段,本次暂不纳入比较范围。 1. *...

    Android网络图片加载缓存处理库 ImageLoader

    总之,ImageLoader为Android开发者提供了一套完整的网络图片加载和缓存解决方案,通过其丰富的功能和灵活的配置,能够有效地提升应用的性能和用户体验。在实际开发中,可以根据项目需求选择合适的图片加载库。

    带有本地缓存机制的http连接框架

    【带有本地缓存机制的http连接框架】 在移动应用开发中,尤其是Android平台,网络请求是必不可少的一部分。...Android-Async-Http作为这样一个框架,为开发者提供了便捷、高效的网络请求解决方案。

    Android图片压缩解决方案,解决图片加载过程中ANR现象

    本解决方案旨在探讨如何有效压缩Android中的图片,避免ANR现象,提高用户体验。 首先,理解ANR全称为Application Not Responding,当Android系统检测到主线程被阻塞超过5秒钟时,就会向用户显示ANR对话框。图片加载...

    Android Google官网的图片缓存源码.rar

    Google的图片缓存库,例如Glide或Picasso,都提供了完整的图片加载、解码和缓存解决方案。这些库通常包含以下关键组件: 1. **ImageLoader**:负责从网络、本地资源或文件系统加载图片。 2. **Decoder**:解析图片...

    Android-GlideAndroid图像加载和缓存库专注于流畅体验

    在Android应用开发中,高效的图片加载和管理是至关重要的,特别是在设计用户界面和提供流畅的用户体验时。...总之,Glide为Android应用提供了强大而简便的图片加载解决方案,有助于提升应用的整体性能和用户体验。

    android gallery 只加载当前图片 图片缓存 异步 下载

    当图片不在本地缓存中时,需要从网络上下载。通常,我们会使用HTTP或HTTPS协议进行下载。在Android中,可以使用HttpURLConnection、OkHttp等网络库来实现。下载完成后,将图片保存到本地并添加到缓存系统中。 5. *...

    Android应用源码之下载网络图片 (整合多线程、内存缓存、本地文件缓存~).rar

    这份压缩包中的源码提供了一个完整的解决方案,它整合了多线程下载、内存缓存以及本地文件缓存技术,旨在提高应用程序性能并优化用户体验。下面我们将深入探讨这些关键知识点。 1. **多线程下载**: 在Android中,...

Global site tag (gtag.js) - Google Analytics