天天看點

SharedPreferences 的用法SharedPreferences 的用法 Android資料存取之Preferences 注意:

SharedPreferences存儲類效率分析

SharedPreferences是Android平台上一個輕量級的存儲類,主要是儲存一些常用的配置比如視窗狀态,一般在Activity中 重載視窗狀态onSaveInstanceState儲存一般使用SharedPreferences完成,它提供了Android平台正常的Long長 整形、Int整形、String字元串型的儲存,它是什麼樣的處理方式呢?

  SharedPreferences類似過去Windows系統上的ini配置檔案,但是它分為多種權限,可以全局共享通路,android123提示最 終是以xml方式來儲存,整體效率來看不是特别的高,對于正常的輕量級而言比SQLite要好不少,如果真的存儲量不大可以考慮自己定義檔案格式。xml 處理時Dalvik會通過自帶底層的本地XML Parser解析,比如XMLpull方式,這樣對于記憶體資源占用比較好。

--------------------------------------------------------------------------------------------------------------------------

SharedPreferences 的用法

2個activity 之間的資料傳遞除了可以他通過intent來傳遞,還可以使用SharedPreferences來共享資料的方式

SharedPreferences 用法很簡單.

在A中

設定

Editor sharedata = getSharedPreferences("data", 0).edit();
   sharedata.putString("item","hello getSharedPreferences");
   sharedata.commit();
           

B中擷取

SharedPreferences sharedata = getSharedPreferences("data", 0);
String data = sharedata.getString("item", null);
Log.v("cola","data="+data);
           

Android資料存取之Preferences

這種方式應該是用起來最簡單的Android讀寫外部資料的方法了。他的用法基本上和 J2SE(java.util.prefs.Preferences)中的用法一樣,以一種簡單、 透明的方式來儲存一些使用者個性化設定的字型、顔色、位置等參數資訊。一般的應用程式都會提供“設定”或者“首選項”的這樣的界面,那麼這些設定最後就可以 通過Preferences來儲存,而程式員不需要知道它到底以什麼形式儲存的,儲存在了什麼地方。當然,如果你願意儲存其他的東西,也沒有什麼限制。隻 是在性能上不知道會有什麼問題。

在Android系統中,這些資訊以XML檔案的形式儲存在 /data/data/PACKAGE_NAME /shared_prefs 目錄下。

資料讀取

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檔案中:

    <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什麼什麼為空的判斷。

資料寫入

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對象,在存儲他們時,以確定參數值有統一的狀态和控制

目前此類不支援多線程,