Пояснение на SharedPreferences

Имам 2 дейности, във втората дейност поставям низове в споделените предпочитания с помощта на редактор и го ангажирам.

когато се върна от 2-ра дейност към 1-ва дейност, за да видя, че низовете не се показват.

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

Моят въпрос: SharedPreferences работи ли по този начин?

Тъй като предишните стойности се връщат, дори след актуализирането му до нови стойности във 2-ро действие.

Първата дейност има 2 текстови изгледа само за показване на низове.

2-ра дейност за въвеждане на 2-та низа, запишете и finish(); се върнете към 1-ва дейност

Първа дейност в метода Oncreate извличам споделените предпочитания и дисплей

при преминаване към 2-ра дейност от 1-ва към 2-ра i finish(); 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/ app/Activity.html   -  person Darwind    schedule 15.09.2013
comment
@Darwind Да, но при превключвател за активност, като във въпроса за OPs, той определено ще бъде извикан.   -  person Steve Benett    schedule 15.09.2013
comment
@SteveBenett: Технически погледнато, не. Ако втората дейност е диалогова, първата дейност ще бъде видима през целия живот на втората дейност и в този случай ще бъдат извикани само 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 работи, защото в противен случай няма да видите същите низове отново, след като сте убили приложението.

Всичко е свързано с момента на четене и запис на данните в предпочитанията. Ако оставите дейност onPause, това е обратното извикване, където да запишете вашите данни в предпочитанията. Тъй като това е последното обратно извикване, на което можете да разчитате, че ще бъде уволнено в жизнения цикъл. Тъй като трябва да имате предвид, че системата може да убие и вашата активност и onDestroy може да не бъде извикан.

За да четете от предпочитанията, трябва да използвате onResume като опция по подразбиране. Във вашия случай мисля, че onStart също работи. Но като цяло onResume е правилният начин.

По този начин винаги пишете/четете правилно и вашите дейности винаги показват актуални данни.

person Steve Benett    schedule 15.09.2013