您的位置:首页 > 移动开发 > Android开发

Android轻量级的存储SharedPreferences及getSharedPreferences 、 getPreferences 与getDefaultSharedPreferences

2017-05-09 10:13 399 查看

SharedPreferences适用范围

保存少量的数据,且这些数据的格式简单:字符串型、基本类型的值。比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果,口令密码等

原理:SharedPreferences数据总是存储在/data/data//shared_prefs目录下的一个XML文件。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor对象实现。 SharedPreferences本身是一 个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的

getSharedPreferences(String xml文件名, int 权限模型)方法来获取SharedPreferences实例,该方法中name表示要操作的xml文件名,第二个参数具体如下:

Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写。

Context.MODE_WORLD_READABLE: 数据能被其他应用只读。

Context.MODE_WORLD_WRITEABLE: 数据能被其他应用读,写

Editor有如下主要重要方法:

SharedPreferences.Editor clear():清空SharedPreferences里所有数据

SharedPreferences.Editor putXxx(String key , xxx value): 向SharedPreferences存入指定key对应的数据,其中xxx 可以是boolean,float,int等各种基本类型据

SharedPreferences.Editor remove(): 删除SharedPreferences中指定key对应的数据项

boolean commit(): 当Editor编辑完成后,使用该方法提交修改。

保存:
SharedPreferences sf;
sf = context.getSharedPreferences("test", Context.MODE_PRIVATE);
//获取编辑器
Editor editor = sf.edit();
//使用编辑器写入数据
editor.putInt("userId", 1001);
editor.putString("userName", "tom");
editor.putBoolean("sex", true);
//提交数据
editor.commit();
获取数据:
SharedPreferences sf= context.getSharedPreferences(SHAREDPREFERENCES_NAME, Context.MODE_WORLD_READABLE);
String userName= sf.getString(userName, "默认的值");


getSharedPreferences 与 getPreferences 与getDefaultSharedPreferences的区别

getSharedPreferences() — 如果需要多个通过名称参数来区分的shared preference文件, 名称可以通过第一个参数来指定。可在app中通过任何一个Context 执行该方法。是Context类中的方法, 可以指定file name 以及 mode。

getPreferences()— 当activity仅需要一个shared preference文件时。因为该方法会检索activity下默认的shared preference文件,并不需要提供文件名称(activity的类名) 是Activity类中的方法,只需指定mode

getDefaultSharedPreferences 据说每个应用有一个默认的偏好文件preferences.xml。使用getDefaultSharedPreferences获取

还有 PreferenceActivity 和FragmentActivity并没什么卵用。

commit和apply

commit和apply虽然都是原子性操作,但是原子的操作不同,commit是原子提交到数据库,所以从提交数据到存在Disk中都是同步过程,中间不可打断。

而apply方法的原子操作是原子提交的内存中,而非数据库,所以在提交到内存中时不可打断,之后再异步提交数据到数据库中,因此也不会有相应的返回值。

所有commit提交是同步过程,效率会比apply异步提交的速度慢,但是apply没有返回值,永远无法知道存储是否失败。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 存储
相关文章推荐