2016.12.22

在使用图片加载库Glide时,要让磁盘缓存到指定的目录用 DiskLruCacheFactory:

由此展开的 Android 缓存策略和目录。

一、缓存:

通俗的说就是把一些经常使用但需要联网获取的文件,通过一种策略持久的保存在内存或者存储设备中,当下一次需要用到这些文件的时候,不需要联网,直接从内存或存储设备中获取就可以了。这种策略就是缓存策略。

二、缓存策略:

一般来说包含缓存的添加、获取、删除。删除是指缓存的大小已经超过定义的缓存的大小后移除已有的一部分缓存。比如LRU算法(最近最少使用算法)会移除最近最少使用的那一部分缓存,以此来添加新的缓存。关于缓存的好处两点:节省流量;提高用户体验。

三、LruCache和DiskLruCache

LruCache 和 DiskLruCache 就是基于LRU算法的缓存策略。LruCache 是用于实现内存缓存的,而DiskLruCache 实现存储设备缓存,也就是直接缓存到本地。其中 LruCache 在Android中已经封装成了类,直接用就可以了。而 DiskLruCache 需要下载对应的文件才能用。

LruCache是将文件类型缓存到内存中,随着APP中Activity的销毁,内存也会随之回收。也就将内存中的缓存回收掉,再次打开APP的时候,内存中找不到缓存,需要重新加载。

DiskLruCache是缓存到存储设备中,用于实现存储设备缓存,即磁盘缓存,它通过将缓存对象写入文件系统从而实现缓存的效果。当APP被kill的时候,缓存不会消失。

LruCache的内部实现是LinkedHashMap,也就是集合。所以添加获取方式通过put与get就行了。而DiskLruCache是通过文件流的形式来缓存,所以添加获取是通过输入输出流来实现。

普通线程加载、LruCache 加载、DiskLruCache 加载和 Bitmap 压缩类在一起封装成一个大的类。就是大家常提到的ImageLoader。它专门用来处理Bitmap的加载。这三种加载方式结合,也就是大家常听说的三级缓存机制。

四、缓存目录

应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SD卡中。

1)手机自带的存储空间

getFileDir() -----/data/user/0/xx.xxx.xxx(当前包)/files

getCacheDir() ----- /data/user/0/xx.xxx.xx(当前包)/cache

2)外部SD卡上

a:一部分应用是直接在SD卡的根目录下创建一个文件夹,然后把数据保存在该文件夹中。这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。

b:当应用被卸载后,与该应用相关的数据也应清除掉:

Context.getExternalFilesDir()---/storage/emulated/Android/data/应用包名/files,长时间保存的数据Context.getExternalCacheDir()----/storage/emulated/Android/data/应用包名/cache,临时缓存数据

如果使用上面的方法,当应用在被用户卸载后,SDCard/Android/data/应用包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。

注意:如果要保存下载的内容,就不要放在以上目录下。

总结:

context.getCacheDir()   、context.getExternalCacheDir()

相同点:

1、相同点:都可以做app缓存目录。

2、app卸载后,两个目录下的数据都会被清空。

不同点:

1、目录的路径不同:目录分别存在  app的内部存储上、外部SD卡上的。

2、前者的路径需要root以后,用Root Explorer 文件管理器才能看到。后者的路径在手机里可以直接看到。

注意:由于context.getExternalCacheDir() 的目录存在外部SD卡上的,所以在使用这个方法的时候要判断外部SD卡的状态是否可用

android 根目录缓存,Android缓存策略和目录相关推荐

  1. android 根目录uri,Android FileProvider 踩坑指北

    前言 从 Android N(7.0) 开始,将严格执行 StrictMode 模式.而从 Android N 开始,将不允许在 App 间,使用 file:// 的方式,传递一个 File ,否者会 ...

  2. android 根目录缓存,Android系统中内部存储和外部存储(公有目录、私有目录、缓存目录)详解...

    首先,明确一个概念,Android内部存储和外部存储并非所谓的手机自带内存是内部存储,SD卡是外部存储云云. Android对内部存储和外部存储不是在物理上区分的,而是在逻辑上区分的.git 1.概念 ...

  3. Android之Bitmap高效缓存以及android缓存策略

    Android之Bitmap高效缓存 一.Bitmap高效加载 1.bitmap的基本概念 位图:获取像素值进行加载. Bitmap是Android系统中图像处理中的最重要的一个类. 通过Bitmap ...

  4. android查看程序缓存文件,Android App的文件缓存目录

    Android app的文件缓存目录可以是app内置私有的目录,当然也可以选择外置sdcard目录 内置私有目录 /data/data/[packagename]/files 文件缓存目录,一般存小的 ...

  5. Android应用程序文件缓存getCacheDir()和getExternalCacheDir()

    如果Android引用程序需要缓存临时文件,系统提供了一个可管理的"内部缓存"和一个不可管理的"外部缓存",分别调用getCacheDir()和getExter ...

  6. Android中的三级缓存解析与实战

    凡永恒伟大的爱,都要绝望一次,消失一次,一度死,才会重获爱,重新知道生命的价值.--<文学回忆录> 1.概述 由于Bitmap的特殊性以及Android对单个进程应用只分配16M的内存,这 ...

  7. android cache缓存,Android缓存Cache学习

    Android缓存Cache学习 java 项目中须要用到缓存,我使用的是文件缓存,这里简单总结下:android 主要思路是封装一个缓存对象,将每一个界面须要缓存的数据做为缓存对象的属性,将缓存对象 ...

  8. android强制缓存写磁盘,优雅的构建 Android 项目之磁盘缓存(DiskLruCache)

    Android 的缓存技术 一个优秀的应用首先它的用户体验是优秀的,在 Android 应用中恰当的使用缓存技术不仅可以缓解服务器压力还可以优化用户的使用体验,减少用户流量的使用.在 Android ...

  9. Android开发-WebView的缓存处理和性能优化 实现H5页面秒开【四】

    前言 老早之前就想总结下Webview相关的知识点了,因为互联网大潮中,很多APP都会使用到Webview,像那些不计其数的电商APP,无一例外的使用Webview:或者一些非电商APP中的像广告页面 ...

最新文章

  1. MOS管体二极管的作用
  2. class function,delphi静态函数的对象基址分析static
  3. 2020-10-13 四元数用法(不讲原理,只讲计算规则)
  4. day10-协程遇到IO操作自动切换
  5. 四轮驱动(SSMR)移动机器人运动模型及应用分析
  6. python计时器timeit返回秒数_一日一技:Python中的timeit()方法
  7. 代码健壮性的获得 —— 借助编译器及语言的语法特性
  8. maven setting 设置jdk版本
  9. 25. 熟悉非标准的哈希容器
  10. python中tolist()命令
  11. easyui datagrid 表格不让选中(双层嵌套)
  12. 华为以“平台应变”之道角逐数字化转型“深水区”
  13. 卡内基梅隆计算机专业,美国卡内基梅隆大学计算机学院有几个分专业?
  14. dcs系统opc服务器设置,如何配置紫金桥软件与DCS的OPC进行通讯
  15. Reno5、Reno5 Pro和Reno5 Pro+ 的区别
  16. 关系的深度——《纸牌屋》伍德克莱尔夫妇的深刻关系
  17. 【无线通信协议笔记】蓝牙篇:BLE HID协议
  18. mean shift:从图像分割到特征空间分析
  19. 解锁工具Unlocker试用
  20. linux下mysql可视化工具安装

热门文章

  1. Grizzly NIO框架
  2. MySQL之offset
  3. 数学建模——大数据时代下的中小微企业信贷决策(2020年国赛C题)
  4. SQL server求百分比
  5. 东芝、东北大学宣布:世界首次使用量子密码技术传输基因组数据
  6. Phython常用函数
  7. 双11财务报表怎么做?不用Excel,10分钟学会动态可视化报表
  8. 基于单片机的自动喂食仿真设计(#0051)
  9. 2012年总结2013年展望
  10. 基于JAVA大学生体检管理系统计算机毕业设计源码+系统+lw文档+部署