Remote service и Activity - работа с prefrences
Добавлено: 24 окт 2015, 20:58
Здравствуйте!
Подскажите куда копать:
Основная часть приложения работает в удаленном сервисе (:remote). Есть настройки (sharedPreferences) которые используются и в активити и в сервисе.
Проблема заключается в следующем: при изменении настроек сервис не может получить из файла измененные данные,
такое ощущение что для каждого процесса своя копия переменных и пока приложение не перезагрузишь сервис обновленных данных не видит, но активити при этом может считать "свежую" версию.
Пробовал создавать и собственные объекты sharedPrefrences в активити и сервисе и делать один в Application и потом через
него считывать данные - все равно ничего не меняется. Делал даже отдельный класс с переменными - активити читает
preferences и меняет значение переменной в классе, а сервис потом сам оттуда считывает данные. Объект класса
также создавал и в сервисе и в application - все остается как есть.
Думаю что загвоздка в том что реально все происходит в разных процессах,
но имхо вариант с файлом тут самый подходящий. Почему данные не обновляются - не пойму.
Для чтения из файла в сервисе создавал как глобальный (для класса в котором читаю) объект sharedPreferences так и локальный в методе где нужны данные (т.е. по идее при каждом обращении к методу объект создается заново и уже
в любом случае файл должен считываться заново).
Возможно есть какой-то способ принудительно сбросить/обновить кэш?
Вариант передавать через интент не хочу использовать - кмк для интента многовато данных будет...
(кстати, есть какие то рекомендации/ограничения по объему данных в интенте?)
Дополнение: стартует приложение с активити, а потом уже запускается сервис (за исключением случаев когда сервис запускается интентом с alarm manager'a). Возможно стОит сделать основным запуск сервиса, а уже потом из него
стартовать активити? Перенесется ли после этого активити в один процесс с сервисом?
Подскажите куда копать:
Основная часть приложения работает в удаленном сервисе (:remote). Есть настройки (sharedPreferences) которые используются и в активити и в сервисе.
Проблема заключается в следующем: при изменении настроек сервис не может получить из файла измененные данные,
такое ощущение что для каждого процесса своя копия переменных и пока приложение не перезагрузишь сервис обновленных данных не видит, но активити при этом может считать "свежую" версию.
Пробовал создавать и собственные объекты sharedPrefrences в активити и сервисе и делать один в Application и потом через
него считывать данные - все равно ничего не меняется. Делал даже отдельный класс с переменными - активити читает
preferences и меняет значение переменной в классе, а сервис потом сам оттуда считывает данные. Объект класса
также создавал и в сервисе и в application - все остается как есть.
Думаю что загвоздка в том что реально все происходит в разных процессах,
но имхо вариант с файлом тут самый подходящий. Почему данные не обновляются - не пойму.
Для чтения из файла в сервисе создавал как глобальный (для класса в котором читаю) объект sharedPreferences так и локальный в методе где нужны данные (т.е. по идее при каждом обращении к методу объект создается заново и уже
в любом случае файл должен считываться заново).
Возможно есть какой-то способ принудительно сбросить/обновить кэш?
Вариант передавать через интент не хочу использовать - кмк для интента многовато данных будет...
(кстати, есть какие то рекомендации/ограничения по объему данных в интенте?)
Дополнение: стартует приложение с активити, а потом уже запускается сервис (за исключением случаев когда сервис запускается интентом с alarm manager'a). Возможно стОит сделать основным запуск сервиса, а уже потом из него
стартовать активити? Перенесется ли после этого активити в один процесс с сервисом?
