【问题标题】:android disk cache vs memory cacheandroid磁盘缓存与内存缓存
【发布时间】:2016-06-12 09:23:48
【问题描述】:

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

【问题讨论】:

  • 内存缓存是自动的,取决于您使用的类。一些创建的布局和字符串值也被存储用于翻译目的或变量字符串引用。所以你在说什么。选择使用什么?
  • 同时使用。如果你只使用 Lru,你会减慢设备的速度。如果您只使用磁盘,则会占用设备的存储空间

标签: android caching memory disk


【解决方案1】:

内存缓存:-

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

磁盘缓存:-

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

【讨论】:

    【解决方案2】:

    LruCache

    简单地说,LruCahce 有点像HashMap。它将在运行时存储您的键值对,直到

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

    看下面的代码sn-p。一旦上述操作之一发生,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

    相反,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);
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-11-19
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      相关资源
      最近更新 更多