杂记之SharedPreferences

前言

  • sp存储数据的本质是sp会在本地存储中根据传入的名字创建一个相应的xml文件。
  • SharedPreferences 本质是接口,真正执行存取的是它的实现类SharedPreferencesImpl。
  • 整个应用中只存在一个sSharedPrefs对象。sSharedPrefs本质是一个hashMap,key为name,value是SharedPreferencesImpl的对象。

1: SharedPreferences的简单使用

  • 存储数据
SharedPreferences sp=getSharedPreferences("data",MODE_PRIVATE);
SharedPreferences.Editor editor=sp.edit();   //获取编辑器
editor.putString("name","Liu"); //存入String型数据
editor.putInt("age",8);         //存入Int类型数据
editor.commit();   
  • 取数据
SharedPreferences sp=getSharedPreferences("data",MODE_PRIVATE);
 //第二个参数为缺省值,如果不存在该key,返回缺省值
 String data=sp.getString("name","");

2:从源码角度解析使用

2.1:存储数据部分
a 获取创建SharedPreferences 对象
SharedPreferences sp=getSharedPreferences("data",MODE_PRIVATE);

作用:根据名字“data",去sSharedPrefs中获取SharedPreferencesImpl相应的对象:

  • 如果存在,说明之前使用名字”data“存储过数据,拿到SharedPreferencesImpl相应的对象并从本地数据中将相应的xml文件数据读取到内存mMaps中;
  • 如果不存在,说明没使用”data"存储过数据,直接创建相应的新的SharedPreferencesImpl对象和本地xml文件,并将新的SharedPreferencesImpl对象放入sSharedPrefs中。
    备注:这个过程中重点是有个将本地数据读取到内存中的IO操作,比较耗时。
b 创建编辑器
SharedPreferences.Editor editor=sp.edit();   //获取编辑器

作用:让主线程等待并保证"本地数据读取到内存中的IO操作"这一过程执行结束后,再创建EditorImpl(Editor接口的实现类)的对象,EditorImpl对象中使用之前内存中的mMaps复制一份数据到其成员变量mModifiled中。

2573196-a8bc56fb029c3373.png
备注 :需要注意这个过程每次都会创建一个新的EditorImpl对象,建议全局创建一个EditorImpl对象,然后统一管理。
c 编辑数据
editor.putString("name","Liu"); //存入String型数据
editor.putInt("age",8);         //存入Int类型数据

作用: 这个过程数据的编辑其实都是对mModifiled数据的修改。

d 提交
editor.commit(); //ui主线程中执行
editor.apply();     //工作线程中执行

作用:对比mModifiled和mMaps中的数据差异,将差异数据写入mMaps中,然后将mModifiled数据清空,并将最新的数据mMaps通过IO操作写入本地数据想用的xm文件中。
备注:也就是每次commit或者apply操作,基本上都是一次IO操作,比较耗内存。

2.2 : 取数据

  • a 创建sp对象
SharedPreferences sp=getSharedPreferences("data",MODE_PRIVATE);

作用跟存放数据一个流程,不赘述。

  • b 取数据
String data=sp.getString("name","");
1573462821(1).png

作用:也有个等待的过程,保证第一步骤中的IO操作结束后,才继续执行。取数据是直接从内存中的mMaps进行操作的。

这个杂记是我读了佳作Android之不要滥用SharedPreferences,之后自己的思路的一个梳理,建议可以先细致看完Android之不要滥用SharedPreferences之后,再看这个杂记,可以加深理解和记忆。最后非常感觉Android之不要滥用SharedPreferences作者的无私分享!!!

你可能感兴趣的:(杂记之SharedPreferences)