SharedPreferences

SharedPreferences

SharedPreferences是Android平台上一個輕量級的存儲類,用來保存套用的一些常用配置,比如Activity狀態,Activity暫停時,將此activity的狀態保存到SharedPereferences中;當Activity重載,系統回調方法onSaveInstanceState時,再從SharedPreferences中將值取出。

SharedPreferences提供了java常規的Long、Int、String等類型數據的保存接口。 SharedPreferences類似過去Windows系統上的ini配置檔案,但是它分為多種許可權,可以全局共享訪問。

提示最終是以xml方式來保存,整體效率來看不是特別的高,對於常規的輕量級而言比SQLite要好不少,如果真的存儲量不大可以考慮自己定義檔案格式。xml處理時Dalvik會通過自帶底層的本地XML Parser解析,比如XMLpull方式,這樣對於記憶體資源占用比較好。

基本介紹

  • 中文名:SharedPreferences
  • 操作模式:Context.MODE_PRIVATE
  • 用法:SharedPreferences
  • 數據讀取:String PREFS_NAME 
  • 數據寫入:String PREFS_NAME
操作模式,用法,數據存取,

操作模式

SharedPreferences數據的四種操作模式
  • Context.MODE_PRIVATE
  • Context.MODE_APPEND
  • Context.MODE_WORLD_READABLE
  • Context.MODE_WORLD_WRITEABLE
Context.MODE_PRIVATE:為默認操作模式,代表該檔案是私有數據,只能被套用本身訪問,在該模式下,寫入的內容會覆蓋原檔案的內容
Context.MODE_APPEND:模式會檢查檔案是否存在,存在就往檔案追加內容,否則就創建新檔案.
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他套用是否有許可權讀寫該檔案.
MODE_WORLD_READABLE:表示當前檔案可以被其他套用讀取.
MODE_WORLD_WRITEABLE:表示當前檔案可以被其他套用寫入
特別注意:出於安全性的考慮,MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 在Android 4.2版本中已經被棄用

用法

SharedPreferences 可以用來進行數據的共享,包括應用程式之間,或者同一個應用程式中的不同組件。比如兩個activity除了通過Intent傳遞數據之外,也可以通過SharedPreferences來共享數據。
Editor sharedata = getSharedPreferences("data", 0).edit();
sharedata.putString("item","hello getSharedPreferences");
sharedata.commit();
SharedPreferences sharedata = getSharedPreferences("data", 0);
String data = sharedata.getString("item", null);
Log.v("cola","data="+data);

數據存取

通過SharedPreferences可以保存程式的某些配置信息,而程式設計師不需要知道它到底以什麼形式保存的,保存在了什麼地方。
在Android系統中,SharedPreferences中的信息以XML檔案的形式保存在 /data/data/PACKAGE_NAME/shared_prefs目錄下。
數據讀取
Java代碼
String PREFS_NAME = "Note.sample.roiding.com";
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
String hello = settings.getString("hello", "Hi");
String PREFS_NAME = "Note.sample.roiding.com";SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);boolean silent = settings.getBoolean("silentMode", false);String hello = settings.getString("hello", "Hi");
這段代碼中:SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
通過名稱,得到一個SharedPreferences,顧名思義,這個Preferences是共享的,共享的範圍據現在同一個Package中,這裡面說所的Package和Java裡面的那個Package不同,貌似這裡面的Package是指在AndroidManifest.xml檔案中:
Xml代碼
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.roiding.sample.note"
android:versionCode="1"
android:versionName="1.0.0">
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.roiding.sample.note"android:versionCode="1"android:versionName="1.0.0">
這裡面的package。後面的那個int是用來聲明讀寫模式,先不管那么多了,暫時就知道設為0(android.content.Context.MODE_PRIVATE)就可以了。
boolean silent = settings.getBoolean(”silentMode”, false);
獲得一個boolean值,這裡就會看到用Preferences的好處了:可以提供一個預設值。也就是說如果Preference中不存在這個值的話,那么就用後面的值作為返回值,這樣就省去了我們的if什麼什麼為空的判斷。
數據寫入
Java代碼
String PREFS_NAME = "Note.sample.roiding.com";
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", true);
editor.putString("hello", "Hello~");
editor.commit();
String PREFS_NAME = "Note.sample.roiding.com";SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);SharedPreferences.Editor editor = settings.edit();editor.putBoolean("silentMode", true);editor.putString("hello", "Hello~");editor.commit();有了上面數據讀取的代碼,這裡面的就容易理解了,只是別忘了最後的commit();
注意:
訪問接口和優先修改數據,並由getSharedPreferences(String,int)返回數據,為了統一設定參數,有一個單例類供所有的客戶端共享。修改參數必須通過一個SharedPreferences.Editor對象,在存儲他們時,以確保參數值有統一的狀態和控制
目前此類不支持多執行緒。

相關詞條

熱門詞條

聯絡我們