Android 缓存设计与实现方式

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

Android 缓存设计与实现方式

在初级面试中经常遇到四大组件、五大存储、六大布局。该篇文章主要分析下Android中实现缓存的方式。

一、了解Android的存储方式

关于五大存储

大家一般期待的回答是下面这样的。

  1. SharedPreferences
  2. SQLite数据库
  3. ContentProvider(内容提供者)
  4. 文件存储
  5. 网络存储

还可以用另外一种方式区分,远端存储,和本地存储。

  • SharedPreferences

存储目录:/data/data/<packagename>/shared_prefs/
轻量级存储,本地目录在,在正式发布的版本上,只有root才能看到。

什么是轻量? 对其环境依赖的越少,就越轻量,也就是减少耦合的意思。

  • SQLite

存储目录:/data/data/<package name>/databases/
SQLite 是一个微型数据库,效率高,特别适合存储结构化的数据。Android 中内置了SQLite数据库,它支持SQL语法,但在Android中一般不直接写SQL语句,而是使用第三方库操作对象,达到对数据库增删改查的目的,比如 GreenDao。

  • ContentProvider

ContentProvider 是Android存储数据的方案,底部仍然是使用SqLite。它根据Uri(Universal Resource Identifier)统一资源定位符 确定资源。可以多app使用,比如通讯录可以给多个应用获取。虽然日常开发中对 ContentProvider 使用不多,但和ContentProvider的接触却很频繁,比如 选择一张图片,我们首先拿到的却是Uri。

  • 文件存储

文件存储,分为内部存储和外部存储。

  1. 怎么区分内部存储和外部存储?

对用户而言可插拔的SD卡就是外部存储,焊接在手机内部的就是内部存储。

但对于开发者而言并不是这样。

在该应用目录下的存储是内部存储。

反之即使存在手机不可拆卸的存储卡上,也叫外部存储。

  1. 内部存储和外部存储有哪些不同?

(1) 在/data/data/package_name目录下,在debug环境下,可以通过AndroidStudioDevice File Explorer查询到该app的存储,如果需要查询其它app的这个目录,则需要Root。
(2) 内部存储在应用卸载的时候会被清除,而外部存储不会。
(3) 操作内部存储目录不需要申请存储权限,而外部存储需要存储权限。这点也能理解,操作自己的应用不需要过多干预提醒。

  • 网络存储

文件保存在服务器上,通过url操作服务器上的资源。比如apk的版本更新下载apk的场景。

二、拓展的存储方式

  1. GreenDao-操作对象即修改数据
  2. ACache-一个类轻松缓存
  3. ImageLoader/Glide-缓存图片

三、缓存设计

场景一

“我想缓存一张图片”

使用三级缓存。网络缓存(速度慢、费流量), 本地缓存,内存缓存。

首次网络加载时缓存到本地存储,缓存到内存;
当再次访问该图片时,

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享