在线亚洲AV日韩AV综合AV,国产订精品电影,久久国产精品蜜

      <thead id="u9ncv"><del id="u9ncv"><rp id="u9ncv"></rp></del></thead>

        <thead id="u9ncv"></thead>

        <thead id="u9ncv"><s id="u9ncv"></s></thead>

          <strike id="u9ncv"></strike>
          <table id="u9ncv"><form id="u9ncv"></form></table>
        1. <strike id="u9ncv"></strike>
        2. 使用幫助 | 聯系電話:400-880-0256 0769-23037585 21686281

          Android SharedPreference最佳實踐

          作者:admin 發表于:2014-08-21 點擊:1693  保護視力色:

          Android提供多種方式保存應用數據,其中一種方式是SharedPreferences,使用鍵值對保存私有基本的數據。所有的邏輯僅基于以下三個類:

          SharedPreference

          SharedPreference在這三個類是最重要的,負責獲?。ń馕觯┐鎯祿?。提供獲取對象的編輯接口,在OnSharedPreferenceChangeListener中提供增加移出對象的接口。

          • 創建SharedPreference對象,需要上下文對象(可以是應用程序的上下文)。
          • getSharedPreferences 方法解析配置文件并創建相關的對象映射。
          • 通過上下文有多種創建它,強烈建議使用MODE_PRIVATE。因為創建一個可讀寫的文件是非常危險的,容易在應用中產生安全漏洞。
          // parse Preference file
          SharedPreferences preferences = context.getSharedPreferences("<span class="skimlinks-unlinked">com.example.app", Context.MODE_PRIVATE);
            
          // get values from Map
          preferences.getBoolean("key", defaultValue)
          preferences.get..("key", defaultValue)
            
          // you can get all Map but be careful you must not modify the collection returned by this
          // method, or alter any of its contents.
          Map<String, ?> all = preferences.getAll();
            
          // get Editor object
          SharedPreferences.Editor editor = preferences.edit();
            
          //add on Change Listener
          preferences.registerOnSharedPreferenceChangeListener(mListener);
            
          //remove on Change Listener
          preferences.unregisterOnSharedPreferenceChangeListener(mListener);
            
          // listener example
          SharedPreferences.OnSharedPreferenceChangeListener mOnSharedPreferenceChangeListener
                  =newSharedPreferences.OnSharedPreferenceChangeListener() {
              @Override
              publicvoidonSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
              }
          };
          

          Editor

          SharedPreferences.Editor是用來修改SharedPreferences對象值的接口。你在editor 做出的修改都是待處理的,并沒有被復制到SharedPreferences里,直到你調用commit()或apply()修改才會被執行。

          • 使用簡單的接口在Editor放入值。
          • 同步保存數據使用commit() 方法或者異步保存數據使用apply()方法會更快點。實際上不同的線程使用commit()會更快點,這是我喜歡使用commit()方法的原因。
          • 移出數據使用remove()方法,清除所有數據使用clear()方法。
          // get Editor object
          SharedPreferences.Editor editor = preferences.edit();
            
          // put values in editor
          editor.putBoolean("key", value);
          editor.put..("key", value);
            
          // remove single value by key
          editor.remove("key");
            
          // remove all values
          editor.clear();
            
          // commit your putted values to the SharedPreferences object synchronously
          // returns true if success
          booleanresult = editor.commit();
            
          // do the same as commit() but asynchronously (faster but not safely)
          // returns nothing
          editor.apply();
          

          性能和注意事項

          SharedPreferences是單例對象,你可以很容易獲取你想要的引用。只在你第一次調用getSharedPreferences方法時打開文件時,創建一個實例對象。

          // There are 1000 String values in preferences
          SharedPreferences first = context.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
          // call time = 4 milliseconds
            
          SharedPreferences second = context.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
          // call time = 0 milliseconds
            
          SharedPreferences third = context.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
          // call time = 0 milliseconds
          

          SharedPreferences 是單例對象,你可以改變它的實例,不用擔心同一個對象數據會不同。

          first.edit().putInt(”key”,15).commit();
          intfirstValue = first.getInt(”key”,0));// firstValue is 15
          intsecondValue = second.getInt(”key”,0));// secondValue is also 15
          

          當你第一次調用get方法時,它解析對象并把放入map中,第二次獲取數據從map 中獲取,不需再解析。

          first.getString(”key”,null)
          // call time = 147 milliseconds
          
          first.getString(”key”,null)
          // call time = 0 milliseconds
          
          second.getString(”key”,null)
          // call time = 0 milliseconds
          
          third.getString(”key”,null)
          // call time = 0 milliseconds
          

          記住Preference的數據越大,get、commit、apply、remove和clear方法耗時越長。所以強烈建議把存儲的數據分成小的對象。

          當你的應用更新以后,你的Preferences不會被移除。所以有些情況下需要創建遷移數據的方案。比如,在應用啟動的時候,你的應用解析本地JSON數據,實現這個你需要做的僅僅是存儲標志數據(該數據是否為本地數據)。一段時間后,你更新JSON數據發布新的版本,用戶會更新應用程序但是不會下載新的JSON數據,因為已經在本地存儲了。

          publicclassMigrationManager {
              privatefinalstaticString KEY_PREFERENCES_VERSION ="key_preferences_version";
              privatefinalstaticintPREFERENCES_VERSION =2;
           
              publicstaticvoidmigrate(Context context) {
                  SharedPreferences preferences = context.getSharedPreferences("pref", Context.MODE_PRIVATE);
                  checkPreferences(preferences);
              }
           
              privatestaticvoidcheckPreferences(SharedPreferences thePreferences) {
                  finaldoubleoldVersion = thePreferences.getInt(KEY_PREFERENCES_VERSION,1);
           
                  if(oldVersion < PREFERENCES_VERSION) {
                      finalSharedPreferences.Editor edit = <spanclass="skimlinks-unlinked">thePreferences.edit</span>();
                      <spanclass="skimlinks-unlinked">edit.clear</span>();
                      edit.putInt(KEY_PREFERENCES_VERSION, currentVersion);
                      edit.commit();
                  }
              }
          }
          

          SharedPreferences 數據存儲在app文件夾下的xml文件下。

          // yours preferences
          /data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PREFS_NAME.xml
          
          // default preferences
          /data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PACKAGE_NAME_preferences.xml
          

          Android指南

          示例代碼

          publicclassPreferencesManager {
           
              privatestaticfinalString PREF_NAME ="<span class="skimlinks-unlinked">com.example.app.PREF_NAME";
              privatestaticfinalString KEY_VALUE ="<span class="skimlinks-unlinked">com.example.app.KEY_VALUE";
           
              privatestaticPreferencesManager sInstance;
              privatefinalSharedPreferences mPref;
           
              privatePreferencesManager(Context context) {
                  mPref = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
              }
           
              publicstaticsynchronizedvoidinitializeInstance(Context context) {
                  if(sInstance ==null) {
                      sInstance =newPreferencesManager(context);
                  }
              }
           
              publicstaticsynchronizedPreferencesManager getInstance() {
                  if(sInstance ==null) {
                      thrownewIllegalStateException(PreferencesManager.class.getSimpleName() +
                              " is not initialized, call initializeInstance(..) method first.");
                  }
                  returnsInstance;
              }
           
              publicvoidsetValue(longvalue) {
                  mPref.edit()
                          .putLong(KEY_VALUE, value)
                          .commit();
              }
           
              publiclonggetValue() {
                  returnmPref.getLong(KEY_VALUE,0);
              }
           
              publicvoidremove(String key) {
                  mPref.edit()
                          .remove(key)
                          .commit();
              }
           
              publicbooleanclear() {
                  returnmPref.edit()
                          .clear()
                          .commit();
              }
          }
          

          本文代碼可以在github上找到。

          Android SharedPreference最佳實踐,首發于博客 - 伯樂在線。

          在线亚洲AV日韩AV综合AV,国产订精品电影,久久国产精品蜜