2012-09-28 53 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