Задача такая:
По запросу приложение скачивает с удаленного хранилища файл с настройками SharedPreference AppPrefs.xml. Далее происходит его замена в памяти смартфона. И далее создаю новый экземпляр SharedPreference AppPrefs.xml, но беда в том, что контекст не считывает заново из памяти, а просто достает из контекста старый файл. Из-за этого настройки приложения меняются только после полного перезапуска приложения. Даже метод finish() не помогает, все равно в памяти не меняется экземпляр AppPrefs.xml. Как же быть?
public class AppPreferenceSingleton {
private static AppPreferenceSingleton mAppPreferenceSingleton = null;
private static Context mContext = null;
private static SharedPreferences mAppPref = null;
private static SharedPreferences.Editor mEditorAppPref = null;
public static AppPreferenceSingleton getInstance(Context context, boolean update) {
if (mAppPreferenceSingleton == null || update) {
mAppPref = null;
mEditorAppPref = null;
mContext = context;
mAppPreferenceSingleton = new AppPreferenceSingleton();
}
return mAppPreferenceSingleton;
}
private AppPreferenceSingleton() {
mAppPref = mContext.getSharedPreferences(AppConstants.APP_PREF_NAME, Context.MODE_PRIVATE);
mEditorAppPref = mAppPref.edit();
}
public void createPrefs() {
mEditorAppPref.putString("create", "ok").commit();
}
public void updatePrefs() {
mEditorAppPref.putString("update", "ok").commit();
}
public void setUserName(String userName) {
mEditorAppPref.putString("userName", userName);
mEditorAppPref.commit();
}
public String getUserName() {
return mAppPref.getString("userName", "Студент");
}
}
После того, как скачивание файла AppPrefs.xml завершено, я произвожу обновление:
AppPreferenceSingleton.getInstance(mContext,true);
В дебагер я увидел, что экземпляр mAppPreferenceSingleton создается новый, а mAppPref нет.