Android缓存分为LruCache 和DiskLruCache两种

由于pc端实现网络下载图片直接下载到本地就可以显示而移动设备不管是Android还是ios设备都是通过流量去网络下载图片,它是按流量是收费的,因此我们在开发中就应该考虑到流量的消耗问题,第一次先去缓存中去读取数据
,如果有直接显示,缓存没有再去手机存储设备读取,存储设备没有再去网络下载,这样就节省了用户的流量。

为了提高用户体验,因此需要在缓存中再备份一份。


缓存采用LRU模式 它的核心思想当缓存满的时候,会优先淘汰那些近期使用的缓存对象
采用LRU两种缓存 LruCache 和 DiskLruCache 第一种是显示内存缓存
第二种是存储设备缓存
通过这两者的完美结合是ImageLoader


LruCache从Android 3.1提供的一个缓存类 通过v4包兼容包可以兼容到早期的版本,目前Android2.2以下的用户很少了,因此只要兼容到Android2.2就行了。主要分为三种
强引用
弱引用
软引用

public class lruCache<K,V>
private final LinkedHashMap<K,V> map;
}
int maxMemory=(int)(Runtime.getRuntime().maxMemory()/1024);
int cacheSiez=maxMemory/8;
mMemoryCache=new LruCache<String key,Bitmap bitmap>(cacheSize){


@Override
protected int sizeOf(String key,Bitmap bitmap){
  
 return bitmap.getRowBytes()*bitmap.getHeight()/1024;
}

};
mMemoryCache.get(key)
添加一个缓存对象
mMemoryCache.put(key,bitmap)
downloadUrlToStream(String urlString,OutputStream os)


DiskLruCache 并不能通过构造方法来创建,他提供了open方法用于创建自身。

public statci DiskLruCache open(File directory,int appVersion,int valueCount,long maxSize){

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LRU Cache (最近最少使用缓存) 和 DiskLruCache (基于磁盘的 LRU 缓存) 是两种常见的缓存技术,它们的使用场景和优点如下: 1. LRU Cache 的使用场景: - 当需要缓存一些数据时,但是又不能无限制地增加内存消耗时,可以使用 LRU Cache 进行缓存。 - 当需要快速访问某些数据时,而这些数据的访问频率比较高时,可以使用 LRU Cache 进行缓存。 - 当需要保证缓存数据的时效性,避免过期数据对程序造成影响时,可以使用 LRU Cache 进行缓存。 2. DiskLruCache 的使用场景: - 当需要缓存一些大量的数据时,但是这些数据又不能全部存放在内存中时,可以使用 DiskLruCache 进行缓存。 - 当需要保证数据能够持久化存储时,可以使用 DiskLruCache 进行缓存。 - 当需要对缓存数据进行一些额外的操作时,例如压缩、加密等操作时,可以使用 DiskLruCache 进行缓存。 以下是使用 Kotlin 代码展示 LRU CacheDiskLruCache 的实现方法: ```kotlin // LRU Cache 的实现 import android.util.LruCache // 初始化一个 LRU Cache,设置最大缓存数量为 10 个 val lruCache = LruCache<String, String>(10) // 将数据加入缓存lruCache.put("key1", "value1") // 获取缓存中的数据 val value = lruCache.get("key1") // 移除缓存中的数据 lruCache.remove("key1") // 清除缓存中的所有数据 lruCache.evictAll() ``` ```kotlin // DiskLruCache 的实现 import com.jakewharton.disklrucache.DiskLruCache import java.io.File // 初始化一个 DiskLruCache,设置缓存目录和最大缓存数量为 10 个 val directory = File(context.cacheDir, "disk_cache") val diskCacheSize = 10 * 1024 * 1024 // 10MB val diskLruCache = DiskLruCache.open(directory, 1, 1, diskCacheSize.toLong()) // 将数据加入缓存中 val editor = diskLruCache.edit("key1") editor?.newOutputStream(0)?.use { outputStream -> outputStream.write("value1".toByteArray()) } editor?.commit() // 获取缓存中的数据 val snapshot = diskLruCache.get("key1") val value = snapshot?.getInputStream(0)?.bufferedReader().use { reader -> reader?.readText() } // 移除缓存中的数据 diskLruCache.remove("key1") // 清除缓存中的所有数据 diskLruCache.delete() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值