android磁盘缓存与内存缓存
Posted
技术标签:
【中文标题】android磁盘缓存与内存缓存【英文标题】:android disk cache vs memory cache 【发布时间】:2016-06-12 09:23:48 【问题描述】:我不完全明白何时应该使用内存缓存 (LruCache) 以及何时选择磁盘缓存。还是我应该同时使用它们? 我看了here
【问题讨论】:
内存缓存是自动的,取决于您使用的类。一些创建的布局和字符串值也被存储用于翻译目的或变量字符串引用。所以你在说什么。选择使用什么? 同时使用。如果你只使用 Lru,你会减慢设备的速度。如果您只使用磁盘,则会占用设备的存储空间 【参考方案1】:内存缓存:-
更快地访问此缓存 此缓存会占用您的应用程序内存,因此请避免使用它来存储大量数据 一旦应用进入后台,内存缓存就会被破坏并被系统杀死以节省资源磁盘缓存:-
比内存缓存慢 将其用于大型缓存数据 即使在应用进入后台后数据仍然存在【讨论】:
【参考方案2】:LruCache
简单地说,LruCahce
有点像HashMap
。它将在运行时存储您的键值对,直到
-
应用程序在后台被杀死
用户通过单击返回按钮退出应用程序
用户旋转设备
看下面的代码sn-p。一旦上述操作之一发生,lruCahce
和 randomString
都将从内存缓存中删除
public class Activity extends AppCompatActivity
LruCache<String, Bitmap> lruCache = new LruCache<>(1 * 1024 * 1024); // That means 1Mb memory will be allocated to this LruCahce object
String ranDomString;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_store);
lruCache.put("first_bitmap_url", firstBitmap);
lruCache.put("second_bitmap_url", secondBitmap);
ranDomString = "Random string";
DiskLruCahce
相反,DiskLruCache
将在上述所有操作(被杀死/被返回按钮/屏幕旋转退出)中幸存下来,并且下次 Activity 启动时,您可以从磁盘读取这些数据。在这种情况下,我们可以在下次启动应用程序时获取具有给定键的位图。下面的示例是来自 android 源代码的 sn-p:
public class Activity extends AppCompatActivity
DiskLruCache disklruCache = new DiskLruCache.open(this.getCacheDir(), 1 * 1024 * 1024); // That means 1Mb memory will be allocated to this DiskLruCahce object
String ranDomString;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_store);
disklruCache.put("first_bitmap_url", firstBitmap);
disklruCache.put("second_bitmap_url", secondBitmap);
【讨论】:
以上是关于android磁盘缓存与内存缓存的主要内容,如果未能解决你的问题,请参考以下文章