android磁盘缓存与内存缓存

时间:2016-02-29 10:58:50

标签: android caching memory disk

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

2 个答案:

答案 0 :(得分:0)

内存缓存:-

  • 更快地访问此缓存
  • 此缓存会占用您的应用程序内存,因此请避免使用它来存储大量数据
  • 应用程序进入后台后,内存缓存将被破坏

磁盘缓存:-

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

答案 1 :(得分:0)

  

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

相反,DiskLruCache将保留所有上述操作(被杀死/通过后退按钮退出/屏幕旋转),并且下次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);

    }
}