Android中的数据存储方式

本文深入解析Android中的存储技术,包括使用SharedPreferences管理数据、文件存储方式(内部存储与外部存储)及数据库存储策略。重点介绍了SharedPreferences的使用方法,文件存储的内部与外部区别,以及如何在项目中灵活运用数据库存储数据,同时提供了实例代码指导。

官方文档: Saving Data

1. 使用SharedPreferences

  1. getSharedPreferences(name, mode)
    — Use this if you need multiple shared preference files identified by name, which you specify with the first parameter. You can call this from any Context in your app.
    可从任何Context中获取指定name的SharedPreferences,name必须要独特,推荐以包名开头。
  2. getPreferences()
    — Use this from an Activity if you need to use only one shared preference file for the activity. Because this retrieves a default shared preference file that belongs to the activity, you don’t need to supply a name.
    获取该Activity中的SharedPreferences,该文件以该activity.class命名。

工具类在gittub上。该工具类默认提供一个sharedPreferences,可以传入name获取指定的SharedPreferences。大大方便了调用者。
在项目中可以使用多个SharedPreferences,之前的大多数工具类全部把数据放入一个SharedPreferences中,这样会降低SharedPreferences的查找速度。PreferenceUtil

//示例代码:
PreferenceUtil.instance().put("key", "value").commit();

2. 使用文件

概述

  1. 文件存储地方分为内部存储和外部存储,外部存储分为应用私有数据和公有数据。内部存储全为私有数据。
  2. 私有数据在应用卸载时会被系统全部删掉,公有数据不会。

使用Internal Storage

卸载应用时会将该目录下所有文件清除。

getDir("fileName", mode);// /data/data/包名/app_fileName

getFilesDir();// /data/data/包名/files
getFileStreamPath("fileName");// /data/data/包名/files/fileName

//Be sure to delete each file once it is no longer needed。手动删除不用的文件
//If the system begins running low on storage, it may delete your cache files without warning.如果空间不足,则系统会自动删除一些文件
getCacheDir();// /data/data/包名/cache。 

//也可以直接使用File的静态方法创建文件
File.createTempFile("prefix", "suffix");// /data/data/包名/cache/prefix + Math.randomIntInternal() + suffix

使用External Storage

  1. 使用前必须判断外部存储是否可用。
  2. 外部存储没有实时监控,当空间不足时,文件不会实时被删除,可能返回空对象。不用check可用空间,应当使用try catch包裹再处理。

工具类在github上。StorageUtil

  • 外部私有文件Private files,应用卸载时会删除该文件
//获取外部缓存文件路径
getExternalCacheDir();// /storage/emulated/0/Android/data/包名/cache

//获取外部文件存储路径
getExternalFilesDir(""); // /storage/emulated/0/Android/data/包名/files

//获取指定type外部文件存储路径
getExternalFilesDir("fileName");// /storage/emulated/0/Android/data/包名/files/fileName
  • 公共文件Public files:文件是可以被自由访问,且文件的数据对其他应用或者用户来说都是由意义的,当应用被卸载之后,其卸载前创建的文件仍然保留。
//获取外部公有路径
Environment.getExternalStorageDirectory();// /storage/emulated/0

Environment.getExternalStoragePublicDirectory("");// /storage/emulated/0

Environment.getExternalStoragePublicDirectory("fileName");// /storage/emulated/0/fileName

android中的文件操作详解以及内部存储和外部存储
Android存储使用参考

删除文件

  1. 调用file.delete()方法
  2. 如果是存储在内部存储上,可用直接调用context.deleteFile(“fileName”)删除文件。

3. 使用数据库

使用数据库存储数据,我们一般都使用第三方库来完成。如green-dao等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baiiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值