Android的SharedPreference基本知识点总结

1. SharedPreference

SharedPreference是Android设置的一个轻量级的数据存储的方式。它可以将数据以键值对的形式存放到文件中,在你需要的时候再取出来。

  • 用键值对的形式存储数据,文件内容是这样的(后面代码生成的文件)。
    在这里插入图片描述
  • 默认的存储路径是:data/data/应用程序的包名/shared_prefs,存储文件的格式是xml格式。
  • 存储路径可以手动修改。
  • 一般用于存储重要内容和做一些判断,比如说判断用户是否是第一次打开app。

2. 基本用法

2.1 获取sharedpreference实例

有三种获取实例的方法

  1. Context类获取SharedPreference实例。
    // Activity类继承Context类,可以直接调用
    // 打开指定的文件,如果文件不存在则会创建一个
    SharedPreference sharedPreferences = getSharedPreferences("test", MODE_PRIVATE);
    // 第一个参数代表文件名,第二个代表读写权限,现在的版本只有MODE_PRIVATE值,表示只有本应用有读写权限
    
  2. Activity类中自带的方法。
    SharedPreference sharedPreferences = getSharedPreference(MODE_PRIVATE);
    // Context类方法的简化版,文件名是当前的类名。
    
  3. PreferenceManager中的静态方法(此方法已过时)。
    SharedPreference sharedPreferences = PreferenceManager.getDefaultSharedPreference(this);
    // 传入的参数是context
    

2.2 保存和读取

  1. 保存需要用到SharedPreference.Editor,但是用法很简单,保存用键值对的形式保存。

    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString("name", "SharedPreferenceDemo"); // 第一个参数是key,第二个参数是value
    editor.apply(); // 异步提交,是void方法应用之后就会存储
    //editor.commit(); // 阻塞式提交,是boolean方法,会返回是否提交成功
    

    注意提交的方式有apply和commit两种,apply是异步提交,用工作线程;commit是阻塞提交,用当前线程。

    可以保存的数据类型如下图,不能保存序列化类型。
    在这里插入图片描述

  2. 读取不需要用到Editor,可以直接读取。

    String name = sharedPreferences.getString("name", "default");
    // 第一个参数是读取的key值,第二个参数是读取失败时的默认值。
    

3. 特点和总结

其实sharedPreference的性能效率并不高,总结之后有如下几点:

  • 读取的速度较慢,当我们获取sharedpreference的实例时,实际上已经做完了对整个文件的读取,可想而知,如果文件容量过大,那么相应的读取时间也会变得更长,如果使用不注意再加上用主线程加载的话,很容易就会导致应用卡住。
  • 存储的速度较慢,无论是使用改动一个条目还是多个条目,文件都会被整个覆盖,这样当然就慢了。
  • 占内存,之前也说了,获取实例的时候,会对整个文件进行读取,那么这些读取后的文件自然会占内存,如果不注意的话容易引发各种各样的缺内存事故。

所以对于SharedPreference,其实用起来很简单:

  1. 不要存放过长的key和value,那些奇奇怪怪的json串就别存了。
  2. 不用分成多个文件存储,因为实际上他们在读取之后都是只有程序结束后才会销毁回收内存。
  3. 如果要修改内容,尽量全部修改完再一起提交。

我们的项目一般不用sharedPreference,而是用开源库MMKV来代替它,所以本文也就仅记录一个demo。

参考材料

Android中的SharedPreferences存储 - 萧安 - 博客园
https://www.cnblogs.com/HenuAJY/p/10933370.html
Android之SharedPreferences简介及使用说明_移动开发_casual_clover的博客-CSDN博客
https://blog.csdn.net/casual_clover/article/details/102466381
SharedPreference为什么不适合存储大量数据_移动开发_YanRu的专栏-CSDN博客
https://blog.csdn.net/u010335298/article/details/72884644

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值