Разъяснение SharedPreferences

У меня есть 2 действия. Во втором действии я помещаю строки в общие настройки с помощью редактора и фиксирую их.

когда я возвращаюсь со 2-го действия к 1-му действию, чтобы увидеть, что строки не отображаются.

Но когда я убиваю приложение/выхожу из него и снова запускаю приложение, я могу видеть строки в 1-м действии.

Мой вопрос: работает ли SharedPreferences таким образом?

Поскольку предыдущие значения возвращаются даже после их обновления до новых значений во втором действии.

1-е действие имеет 2 текстовых представления только для отображения строк.

2-е действие, чтобы ввести 2 строки, сохранить и finish();вернуться к 1-му действию

1-е действие в методе Oncreate я получаю общий префикс и отображаю

при переходе ко 2-му действию с 1-го на 2-е я заканчиваю(); 1-е занятие;

Тем не менее новые значения не отображаются, а только после повторного открытия приложения.


person pantera    schedule 15.09.2013    source источник
comment
Сохраните строки в onPause и прочитайте их в onStart.   -  person Steve Benett    schedule 15.09.2013
comment
Это должно работать, если вы кодируете это правильно. Пожалуйста, выложите код записи и чтения.   -  person Szymon    schedule 15.09.2013
comment
так что нет необходимости закрывать приложение, чтобы увидеть обновленные значения?   -  person pantera    schedule 15.09.2013
comment
@SteveBenett onStart не обязательно будет вызван, когда вы вернетесь из другого Activity. Вместо этого ему следует использовать метод onResume. Ознакомьтесь с жизненным циклом активности здесь: developer.android.com/reference/android/ приложение/Activity.html   -  person Darwind    schedule 15.09.2013
comment
@Darwind Да, но при переключении Activity, как и в вопросе OP, он обязательно будет вызван.   -  person Steve Benett    schedule 15.09.2013
comment
@SteveBenett: С технической точки зрения, нет. Если 2-е действие является диалоговым, 1-е действие будет отображаться на протяжении всего жизненного цикла 2-го действия, и в этом случае будут вызываться только onPause()/onResume(). При этом диалоговые действия встречаются редко, поэтому обычно onStop()/onStart() будут вызываться вместе с onPause()/onResume().   -  person CommonsWare    schedule 15.09.2013
comment
Хорошо, вы двое меня поняли .. Я ясно дал понять в своем ответе   -  person Steve Benett    schedule 15.09.2013


Ответы (2)


так что нет необходимости закрывать приложение, чтобы увидеть обновленные значения?

Однако:

  • Вы должны убедиться, что вы действительно перезагружаете свой пользовательский интерфейс из SharedPreferences в первом действии либо с помощью метода жизненного цикла, который, как вы уверены, будет вызван (например, onResume()), либо с помощью OnSharedPreferenceChangeListener

  • Вы должны иметь оба действия в одном процессе (т. е. удалить все атрибуты android:process из манифеста).

Этот пример проекта демонстрирует редактирование настроек в одном действии и их отображение в другая деятельность.

person CommonsWare    schedule 15.09.2013

Я предполагаю, что ваш код о SharedPreferences работает, потому что в противном случае вы не увидите те же строки снова после того, как вы убили приложение.

Все дело в моменте чтения и записи данных в настройках. Если вы оставляете Activity onPause, это обратный вызов, куда записывать ваши данные в настройках. Потому что это последний обратный вызов, на который вы можете рассчитывать в жизненном цикле. Потому что вы должны учитывать, что система также может убить вашу активность, а onDestroy не может быть вызван.

Чтобы читать из настроек, вы должны использовать onResume по умолчанию. В вашем случае я думаю, что onStart тоже работает. Но в целом onResume — это то, что нужно.

Таким образом, вы всегда правильно пишете / читаете, и ваши действия всегда показывают актуальные данные.

person Steve Benett    schedule 15.09.2013