2012-09-28 95 views
0

我有一個應用程序,當我第一次運行應用程序時,我約設置了大約200個共享首選項。我最初是通過從我的onCreate方法調用它來加載所有偏好設置sharedPreferences默認值

SharedPreferences pref = getSharedPreferences(CALC_PREFS, MODE_PRIVATE); 
settingsEditor = prefs.edit(); 
settingsEditor.putString("Something", ""); 
.... 
settingsEditor.commit(); 

它會很好,而且很快。然後,我重新設計了我的應用程序,使其擁有抽象活動類來處理所有使用共享偏好的工作,因爲我有4個不同的活動來訪問這些偏好。

public abstract class AnActivity extends Activity{ 

// Shared Preference string 
private static final String CALC_PREFS = "CalculatorPrefs"; 
// Editor to customize preferences 
private Editor settingsEditor; 
// Shared preference 
private SharedPreferences prefs; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    prefs = getSharedPreferences(CALC_PREFS, MODE_PRIVATE); 
    settingsEditor = prefs.edit(); 
} 

protected void addPref(String key, String value){ 
    settingsEditor.putString(key, value).commit(); 
} 

protected void addPref(String key, int value){ 
    settingsEditor.putInt(key, value).commit(); 
} 
//other methods were not posted  
} 

我的主要活動不擴展「AnActivity」類。但是,當我在全新安裝上運行我的應用程序或試圖訪問任何共享首選項時,實例化所有內容需要10秒以上的時間。

如何以乾淨有效的方式設置默認值?創建Abstract類以處理首選項會創建比僅手動調用getSharedPreferences更多的開銷嗎?

回答

1

你每次添加首選項時都在提交嗎?這可能是你的問題,爲每個條目提交可能會相當昂貴,將你的put和batch一起提交一次。

如果您不需要指定默認值,你可以總是使用明確的(),而不是

http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#clear%28%29

+0

固定它。我在每個偏好之後被稱爲commit();我不知道它有多昂貴。我最初將200個偏好一起投入使用,並沒有考慮到重組。非常感謝! – zabawaba99