Android-SharedPreferences 使用詳解

魯迅認識的那隻猹發表於2018-08-23

Android-SharedPreferences 使用詳解

參考

developer.android.google.cn/reference/a…

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 方法是直接將資料寫入到 持久化儲存 中。 這一過程都原子性的並且是同步的。如果你比較關心,儲存的結果的話,推薦使用此方法。