繁体   English   中英

Android磁盘缓存与内存缓存

[英]android disk cache vs memory cache

我不完全了解何时应该使用内存缓存(LruCache)以及何时选择磁盘缓存。 还是应该同时使用它们? 我看着这里

内存缓存:-

  • 更快地访问此缓存
  • 此缓存会占用您的应用程序内存,因此请避免将其用于存储大量数据
  • 一旦应用程序进入后台,内存缓存将被销毁,并被系统杀死以节省资源

磁盘缓存:

  • 比内存缓存慢
  • 用于大型缓存数据
  • 即使应用程序进入后台,数据仍然存在

LruCache

简而言之, LruCahce有点像HashMap 它将在运行时存储您的键值对,直到

  1. 该应用程序在后台时被杀死
  2. 用户通过单击后退按钮退出应用程序
  3. 用户旋转设备

查看下面的代码片段。 一旦上述操作之一发生, lruCahcerandomString都将从内存缓存中删除

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

相反, DiskLruCacheDiskLruCache上述所有操作(被杀死/通过后退按钮退出/屏幕旋转),并且下次Activity启动时,您可以从磁盘读取这些数据。 在这种情况下,我们可以在下次启动应用程序时获取具有给定键的位图。 下面的示例是Android源代码的片段:

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);

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM