我有以下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);
}
答案 0 :(得分:0)
我认为问题是您将SharedPreferences
保存在OnStop
内。尝试将其移至OnPause
。
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
saveSettings();
}
来自Android参考的概念:
protected void onStop()
[...]
请注意,在内存不足的情况下,可能永远不会调用此方法 系统没有足够的内存来保持您的活动 调用onPause()方法后运行的进程。