原理
内部是以 XML 结构保存在 /data/data/包名/shared_prefs 文件夹下,数据以键值对的形式保存。如下:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<float name="isFloat" value="1.5" />
<string name="isString">Android</string>
<int name="isInt" value="1" />
<long name="isLong" value="1000" />
<boolean name="isBoolean" value="true" />
<set name="isStringSet">
<string>element 1</string>
<string>element 2</string>
<string>element 3</string>
</set>
</map>
apply 和 commit 的区别
apply:异步执行,没有返回值;
commit:同步执行,有返回值。
如果不考虑结果并且是在主线程执行推荐使用 apply;
需要确保操作成功且有后续操作的话,用 commit()
SharedPreferences 的创建模式
MODE_PRIVATE
:默认模式,该模式下创建的文件只能被当前应用或者与该应用具有相同SharedUserID的应用访问。
MODE_WORLD_READABLE
:允许其他应用读取这个模式创建的文件。在Android N上使用该模式将抛出SecurityException异常。
MODE_WORLD_WRITEABLE
:允许其他应用写入这个模式创建的文件。在Android N上使用该模式将抛出SecurityException异常。
MODE_APPEND
:如果文件已经存在了,则在文件的尾部添加数据。
MODE_MULTI_PROCESS
:SharedPreferences加载标志,当设置了该标志,则在磁盘上的文件将会被检查是否修改了,尽管SharedPreferences实例已经在该进程中被加载了。(鸡肋,不要用,推荐用ContentProvider)