Android SharedPreferences.Editor应用需要太长时间

时间:2014-01-07 12:45:49

标签: android android-preferences

我有以下PreferenceActivity

public class Settings extends PreferenceActivity {

Preference server;
EditTextPreference editServer;
ProgressDialog mDialog;
Handler handler;
Preference bgColor;
EditTextPreference editbgColor;

@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);
    server = findPreference("webservice");
    editServer = (EditTextPreference)server;
    bgColor = findPreference("bgColorOption");
    editbgColor = (EditTextPreference)bgColor;

}

@Override
protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    saveSettings();
}

private void saveSettings() {
    SharedPreferences settings = getSharedPreferences("settings", 0);
    SharedPreferences.Editor editor = settings.edit();  
    editor.putString("Servidor", String.valueOf(editServer.getText().toString()));
    editor.putString("bgCor",String.valueOf(editbgColor.getText().toString()));
    editor.apply();
}

}

我的settings.xml文件如下

<?xml version="1.0" encoding="utf-8"?>

<PreferenceCategory android:title="Sistema"> 

<EditTextPreference
    android:dialogMessage="@string/pref_webservice"
    android:defaultValue="http://"
    android:title="@string/pref_webservice"
    android:key="webservice"/> 

</PreferenceCategory> 

<PreferenceCategory android:title="Aparencia"> 
<EditTextPreference
    android:dialogMessage="@string/BackgroundColorOption"
    android:defaultValue="#ffffff"
    android:title="@string/BackgroundColorOption"
    android:key="bgColorOption" /> 
 </PreferenceCategory> 

我的问题是,当我从我的设置活动返回时,我执行saveSettings并返回主活动,在我的主要活动onResume功能上我应用我的新设置,但他们不立即应用,如果我继续设置第二次再回来,然后呢。我相信它是因为我的editor.apply();花了太长时间?有什么方法可以加快速度吗?

    @Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    SharedPreferences settings = getSharedPreferences("settings", 0);
    String server = settings.getString("servidor", "xxx");
    String bgColor = settings.getString("bgCor", "#000000");        
    mDialog.setMessage("A Actualizar...");
    thread.setServer(server);
    int cor = Color.parseColor(bgColor);
    mainLayout.setBackgroundColor(cor);
}

1 个答案:

答案 0 :(得分:0)

我认为问题是您将SharedPreferences保存在OnStop内。尝试将其移至OnPause

@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
saveSettings();
}

来自Android参考的概念:

  

protected void onStop()

     

[...]

     

请注意,在内存不足的情况下,可能永远不会调用此方法   系统没有足够的内存来保持您的活动   调用onPause()方法后运行的进程。