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