Данные в SharedPreferences не всегда сохраняются
Данные в SharedPreferences не всегда сохраняются
У меня есть 2 процеса и очень много настроек, которие нужни в обоих проецесах. И иногда они не всегда сохраняются.
Сохраняю их:
[syntax=java] SharedPreferences.Editor editor = getSharedPreferences(Constants.KEY_PREF, Context.MODE_MULTI_PROCESS).edit();
editor.putInt(Constants.KEY_PREF_QUEUE_SORT_BY_POSITION, position);
editor.putInt(Constants.KEY_PREF_QUEUE_SORT_BY, by);
editor.apply();[/syntax]
И так далее. Но после вихода из приложения кнопкой "back" а потом swap app из Recent Apps и зайти обратно - дание не те чо нужно.
Или я вибираю и сохраняю сортировку, проверяю - она сохранена, но когда передаю дание в AsyncTask они не те что нужно.
Есть несколько (noobs) вопросов:
- я поменял commit() на apply() но не везьде, может бить что система делает где-то commit, потому держить в памяти и дание не обовляются.
- ест ли разница в Context из которого визивать настройки между getActivity() (в Fragments), MainActivity.this, getApplicationContext()? В теории оно должно возвращать силки на один и тот же обект.
- еще читал что если переменние в static то в SharedPreferences может записатся не те дание которие сейчас там находятся, правда ли єто?
Спасибо за помощь.
Сохраняю их:
[syntax=java] SharedPreferences.Editor editor = getSharedPreferences(Constants.KEY_PREF, Context.MODE_MULTI_PROCESS).edit();
editor.putInt(Constants.KEY_PREF_QUEUE_SORT_BY_POSITION, position);
editor.putInt(Constants.KEY_PREF_QUEUE_SORT_BY, by);
editor.apply();[/syntax]
И так далее. Но после вихода из приложения кнопкой "back" а потом swap app из Recent Apps и зайти обратно - дание не те чо нужно.
Или я вибираю и сохраняю сортировку, проверяю - она сохранена, но когда передаю дание в AsyncTask они не те что нужно.
Есть несколько (noobs) вопросов:
- я поменял commit() на apply() но не везьде, может бить что система делает где-то commit, потому держить в памяти и дание не обовляются.
- ест ли разница в Context из которого визивать настройки между getActivity() (в Fragments), MainActivity.this, getApplicationContext()? В теории оно должно возвращать силки на один и тот же обект.
- еще читал что если переменние в static то в SharedPreferences может записатся не те дание которие сейчас там находятся, правда ли єто?
Спасибо за помощь.
Re: Данные в SharedPreferences не всегда сохраняются
Вы имеете ввиду между getApplication() и getApplicationContext()?ocean911 писал(а): - ест ли разница в Context из которого визивать настройки между getActivity() (в Fragments), MainActivity.this, getApplicationContext()? В теории оно должно возвращать силки на один и тот же обект.
«Life is too short to spend rewriting code»
Re: Данные в SharedPreferences не всегда сохраняются
Нет getActivity() в Fragment і getApplicationContext() например в сервисе?mdzht писал(а):Вы имеете ввиду между getApplication() и getApplicationContext()?ocean911 писал(а): - ест ли разница в Context из которого визивать настройки между getActivity() (в Fragments), MainActivity.this, getApplicationContext()? В теории оно должно возвращать силки на один и тот же обект.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Данные в SharedPreferences не всегда сохраняются
Читаем статью по этому поводу в моей подписи.
Re: Данные в SharedPreferences не всегда сохраняются
Читал, но не понял где ловить BroadcastReceiver. в MainActivity ? или в класе Preferences ?m090050 писал(а):Читаем статью по этому поводу в моей подписи.
И что лучше делать commit или apply в моем случае?
Re: Данные в SharedPreferences не всегда сохраняются
обработайтеocean911 писал(а):Читал, но не понял где ловить BroadcastReceiver. в MainActivity ? или в класе Preferences ?m090050 писал(а):Читаем статью по этому поводу в моей подписи.
И что лучше делать commit или apply в моем случае?
[syntax=java5] @Override
public void onBackPressed() {
super.onBackPressed();
// to do
} [/syntax]
я думаю в вашем случае можно ограничиться с commit()
«Life is too short to spend rewriting code»
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Данные в SharedPreferences не всегда сохраняются
apply() was added in 2.3, it commits without returning a boolean indicating success or failure.- я поменял commit() на apply() но не везьде, может бить что система делает где-то commit, потому держить в памяти и дание не обовляются.
commit() returns true if the save works, false otherwise.
apply() was added as the android dev team noticed that most no one took notice of the return value, so apply is faster as it asynchronous.
http://stackoverflow.com/questions/5960 ... preference
Коммит возвращает всегда булево значение, тогда когда apply не возвращает его. Короче для ручного изменения настроек никакой разницы. Лучше юзать коммит, он был всегда, в отличие от apply.
Для вызова настроек никакой разницы, но контекст как объект не синглтон, их бывает много.- ест ли разница в Context из которого визивать настройки между getActivity() (в Fragments), MainActivity.this, getApplicationContext()? В теории оно должно возвращать силки на один и тот же обект.
Неправда. Возможно вы что-то не так прочитали.- еще читал что если переменние в static то в SharedPreferences может записатся не те дание которие сейчас там находятся, правда ли єто?
