Android 系统常用的五种数据存储方式详解

① SharedPreferences(轻量级键值存储)

原理: 使用 XML 文件以键值对形式存储数据,调用 Context.getSharedPreferences()。

存储路径: data/data/<包名>/shared_prefs/

特点:

  • 轻量、简单,适合少量配置数据
  • 自动持久化为 XML 文件
  • 支持 String、int、boolean、float、long、Set<String> 等类型

应用场景:

  • 用户偏好设置(主题、语言、通知开关)
  • 登录状态、Token 缓存
  • 首次启动引导标识
  • 简单配置参数存储

    val sp = getSharedPreferences("config", MODE_PRIVATE)

    sp.edit().putBoolean("dark_mode", true).apply()

    val darkMode = sp.getBoolean("dark_mode", false)

② 文件存储

原理: 通过 Java I/O 流(FileInputStream / FileOutputStream)直接读写文件。

两种存储位置:

类型 路径 权限
内部存储 data/data/<包名>/files/ 仅本应用可访问
外部存储 storage/emulated/0/ 需运行时权限(6.0+)

特点:

  • 灵活,支持任意格式(文本、图片、音视频、JSON 等)
  • 适合大文件存储
  • 外部存储需处理运行时权限

应用场景:

  • 图片/视频缓存
  • 数据备份(CSV、JSON 导出)
  • 游戏资源存储
  • 日志文件写入

    // 写入

    openFileOutput("data.txt", MODE_PRIVATE).use {

    it.write("Hello".toByteArray())

    }

    // 读取

    openFileInput("data.txt").bufferedReader().readText()

③ SQLite 数据库

原理: Android 内置的轻量级关系型数据库,基于 SQLiteOpenHelper,使用 android.database.sqlite 包。

存储路径: data/data/<包名>/databases/

特点:

  • 完整关系型数据库,支持 SQL 语句
  • 支持索引、事务、触发器
  • 适合存储大量结构化数据
  • 底层由 C 语言编写,Android 原生集成

应用场景:

  • 通讯录、短信、通话记录
  • 电商订单、商品、购物车
  • 聊天消息记录
  • 任何需要复杂查询的 structured 数据

    class MyHelper(context: Context) : SQLiteOpenHelper(context, "demo.db", null, 1) {

    override fun onCreate(db: SQLiteDatabase) {

    db.execSQL("CREATE TABLE user (_id INTEGER PRIMARY KEY, name TEXT)")

    }

    override fun onUpgrade(db: SQLiteDatabase, old: Int, new: Int) {}

    }

④ ContentProvider(内容提供者)

原理: Android 四大组件之一,通过统一 URI 接口暴露数据,实现跨应用数据共享。

核心 URI: content://<authority>/<path>/<id>

特点:

  • 跨应用数据共享的核心方式
  • 提供标准 CRUD 接口(query/insert/update/delete)
  • 底层通常依赖 SQLite 或文件存储
  • 系统内置:联系人、短信、媒体库等

应用场景:

  • 读取系统联系人、相册、短信
  • App 间数据分享(如微信分享图片)
  • 提供自身数据给其他应用
  • 实现数据同步中间件

    // 读取联系人

    val cursor = contentResolver.query(

    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,

    null, null, null, null

    )

⑤ 网络存储(云端存储)

原理: 通过网络将数据上传至云端服务器,本地仅缓存索引/元数据。

常见方式:

  • HTTP/HTTPS RESTful API
  • 云服务 SDK(阿里云 OSS、Firebase、LeanCloud)
  • WebDAV、云盘 API

特点:

  • 数据与设备解耦,支持多端同步
  • 支持海量存储空间
  • 需考虑网络安全(HTTPS、数据加密)
  • 通常需要用户认证

应用场景:

  • 云相册自动备份
  • 笔记/文档多设备同步(印象笔记、Notion)
  • 聊天记录云同步
  • App 业务数据上报
  • 实时协作类应用

📊 5种方式对比

存储方式 数据量 结构化 跨应用共享 典型场景
SharedPreferences 少量 键值对 设置项、登录态
文件存储 任意 任意格式 缓存、媒体、备份
SQLite 大量 关系型 ⚠️ 需配合ContentProvider 业务数据、聊天记录
ContentProvider 中大量 灵活 ✅ 核心方式 系统数据、跨App共享
网络存储 海量 任意 ✅ 多端同步 云备份、云笔记、数据上报

总结: Android 完整提供了从轻量键值(SharedPreferences)到重量级数据库(SQLite)、文件、网络、跨应用共享(ContentProvider)的全栈存储能力。

相关推荐
zzq779710 小时前
Android 风险识别机制实测:从录屏悬浮窗到远程控制的边界评估
android·安全·安卓·app加固·御盾安全
网络研究院3 天前
安卓正在变成苹果,谷歌将限制第三方应用的安装
开源·安卓·谷歌·应用·安装·限制·平台
zzq77973 天前
加固包闪退四象限定位:targetSdk 与保护策略实战解析
android·安全·安卓·安全架构
zzq77974 天前
Android 16 API 36 升级后 APP 加固兼容性问题解析
android·开发语言·安全·kotlin·安卓·安全架构
LDyun_13 天前
.2026主流云手机测评,8款机型高压挂机实测
ios·智能手机·安卓·玩游戏
LDyun_14 天前
2026暑期云手机选型指南:从稳定性、成本到风控六大核心评判维度
arm开发·ios·智能手机·安卓·玩游戏
青枣八神15 天前
Expo如何只通过数据线连接手机的Expo go
react native·智能手机·安卓
Roki Zhang16 天前
自开发网盘APP使用说明
安卓·个人开发·网盘
雁鸣零落16 天前
浏览器扩展 CaptionGo,在网页视频上显示双语字幕,支持 PC 和手机端使用
android·chrome·edge·firefox·安卓