Android- SharedPreferences 使用详解

Android-SharedPreferences 使用详解

参考

https://developer.android.google.cn/reference/android/content/SharedPreferences

Overview

SharedPreferences是个好东西,我们可以用它来存储一些个性化的设置信息或者是一些简单的数据,SharedPreferences是基于XML文件的。如果有大量的数据要存储的话它是不合适的(这时候可以考虑使用Sqlite数据库来存储)。

如何获取SharedPreferences

方法名称 解释
context.getSharedPreferences(string,int) 可以获取或者创建指定名称的SharedPreferences
Activity.getPreferences(int) 获取以当前Activity名称命名的SP,实际上还是调用了getSharedPreferences 方法实现的

先来看一下 getPreferences 方法的源码,我们可以发现 getPreferences 也是调用的 getSharedPreferences 方法。

public SharedPreferences getPreferences(@Context.PreferencesMode int mode) {
    return getSharedPreferences(getLocalClassName(), mode);
}

SharedPreferences使用实例

//向Shared Preferences中写入数据
fun writeData(view: View) {
    val sp = getSharedPreferences("data", Context.MODE_PRIVATE)
    val editor = sp.edit()
    editor.putString("UserName", "This is a username")
    editor.apply()
    Toast.makeText(this, "Write successfully!", Toast.LENGTH_SHORT).show()
}

//从Shared Preference读取数据
fun readData(view: View) {
    val sp = getSharedPreferences("data", Context.MODE_PRIVATE)
    val userName = sp.getString("UserName", "")
    Log.e("TAG", userName)
}

apply和commit方法

apply 和 commit 方法都可以完成 SharedPreferences 数据的提交和保存,但是这两个方法会有一些不同的地方。 apply 和 commit 的操作都是原子性的但是略有区别。

apply 方法 void apply();

如果同一个 SharedPreferences 的多个Editor 同时进行 apply操作,那么以最后一个为准。

apply 并没有返回值,apply方法的操作流程是先将数据提交到内存中的SharedPreferences中(将数据提交到内存中这次操作是原子性的),然后异步地将数据库写入到磁盘中(这一操作不是原子性的是可以被打断的),所以无法获取apply操作是否成功,但是apply方法要比commit 方法要快速,如果你并不关心保存是否成功的结果的话,那么推荐使用此方法。

commit 方法 boolean commit ()

如果同一个 SharedPreferences 的多个Editor 同时进行 commit 操作,那么以最后一个为准。

很明显 commit 方法是具有返回值的,与apply方法不同的, commit 方法是直接将数据写入到 持久化存储 中。 这一过程都原子性的并且是同步的。如果你比较关心,保存的结果的话,推荐使用此方法。

原文地址:https://www.cnblogs.com/slyfox/p/9524823.html