Android之sharedPreferences存储介绍




Android中专门用来存储 轻量级键值对数据的类,会在本地以xml文件形式存储。

一、 运行机制


接口: SharedPreferences在该接口中,定义了一个 Editor接口、一个 edit方法、多个 get方法、一个监听器用于监听内容变更。其中, Editor接口主要用来写入数据, edit方法用来对外提供一个editor实例, get方法用来获取键值对,监听器用于实现类中监听。
接口: Editor接口中含有多个 put方法、一个 commit方法等。之所以要独立出一个接口来进行写操作,是为了保证数据写入的完整性。主要考虑的场景是如果同时要写入多条键值对,这些键值对不会 逐条写入文件中,而是 先打包在一起,再一次性写入,即 one-at-a-time。具体实现方法是在Editor实现一个hashMap来暂存要写入的数据,先把所有键值对写入内存中的该hashMap中,然后再一次性写入文件中。
该过程可以概括为先 commitToMemory, 再 writeToFile


二、 使用方法

首先,想写入键值对,要先获取一个sharedPreferences对象。
此时需要提供两个要素:context上下文对象,对应的文件名字。如下

SharedPreferences sp = context.getSharedPreferenced("userPref", MODE_PRIVATE);

这里,我们要明确这些键值对的 实际存储方式:它们是以多个文件的形式存储:  /data/data/{packageName}/shared_prefs/{name}.xml。其中,实际的 {name}.xml是在程序中指定的。
那么,我们只要调用 context.getSharedPreferences(name, mode)即可获取到所在 packageName文件夹里对应的 name.xml文件映射过来的 SharedPreferences对象。其中, mode是读取文件的方式。
示例:

   
   SharedPreferences.Editor editor = sp.editor();
   editor.put("name", "ihaihai");
   editor.commit();

  
  

三、理解

我们可以简单的理解为:在手机本地某个地方会存放我们自定义的xml文件,每个文件用来存放相关的键值对数据。比如我们希望存储用户的偏好设置,即可创建一个名为UserPref的SharedPreferences并读写即可。

四、比较getSharedPreferencedgetPreference

getSharedPreferenced获取的文件是在package内都可以使用context对象获取到的,只需要指定name就可以获取到特定的xml文件。 但是,getPreference方法是专门用在Activity内部的,创建的xml文件只能在该Activity上下文内获取,而且不需要指定名字,这个xml文件只属于这个Activity。 其它就没有区别了。唯一区别就是一个权限域的区别。 示例:

   Context context = getActivity();
   SharedPreferences sharedPref = context.getSharedPreferences("userPref", MODE_PRIVATE);
   SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);


Android中专门用来存储 轻量级键值对数据的类,会在本地以xml文件形式存储。

一、 运行机制


接口: SharedPreferences在该接口中,定义了一个 Editor接口、一个 edit方法、多个 get方法、一个监听器用于监听内容变更。其中, Editor接口主要用来写入数据, edit方法用来对外提供一个editor实例, get方法用来获取键值对,监听器用于实现类中监听。
接口: Editor接口中含有多个 put方法、一个 commit方法等。之所以要独立出一个接口来进行写操作,是为了保证数据写入的完整性。主要考虑的场景是如果同时要写入多条键值对,这些键值对不会 逐条写入文件中,而是 先打包在一起,再一次性写入,即 one-at-a-time。具体实现方法是在Editor实现一个hashMap来暂存要写入的数据,先把所有键值对写入内存中的该hashMap中,然后再一次性写入文件中。
该过程可以概括为先 commitToMemory, 再 writeToFile


二、 使用方法

首先,想写入键值对,要先获取一个sharedPreferences对象。
此时需要提供两个要素:context上下文对象,对应的文件名字。如下

SharedPreferences sp = context.getSharedPreferenced("userPref", MODE_PRIVATE);

这里,我们要明确这些键值对的 实际存储方式:它们是以多个文件的形式存储:  /data/data/{packageName}/shared_prefs/{name}.xml。其中,实际的 {name}.xml是在程序中指定的。
那么,我们只要调用 context.getSharedPreferences(name, mode)即可获取到所在 packageName文件夹里对应的 name.xml文件映射过来的 SharedPreferences对象。其中, mode是读取文件的方式。
示例:

   
   SharedPreferences.Editor editor = sp.editor();
   editor.put("name", "ihaihai");
   editor.commit();

   
   

三、理解

我们可以简单的理解为:在手机本地某个地方会存放我们自定义的xml文件,每个文件用来存放相关的键值对数据。比如我们希望存储用户的偏好设置,即可创建一个名为UserPref的SharedPreferences并读写即可。

四、比较getSharedPreferencedgetPreference

getSharedPreferenced获取的文件是在package内都可以使用context对象获取到的,只需要指定name就可以获取到特定的xml文件。 但是,getPreference方法是专门用在Activity内部的,创建的xml文件只能在该Activity上下文内获取,而且不需要指定名字,这个xml文件只属于这个Activity。 其它就没有区别了。唯一区别就是一个权限域的区别。 示例:

   Context context = getActivity();
   SharedPreferences sharedPref = context.getSharedPreferences("userPref", MODE_PRIVATE);
   SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值