Управление SharedPreferences в PreferenceActivity и Сервисе в одном приложении

1

Я создаю приложение с PreferenceActivity и службой (работаю в своем собственном удаленном процессе из-за флага android: process = ": remote" ), и оба должны получить доступ к программным файлам SharedPreferences. В настоящее время я получаю объект SharedPreference со следующим кодом, который использует метод getSharedPreferences, определенный как в классах Service, так и PreferenceActivity:

SharedPreferences sharedPrefs = getSharedPreferences("com.mypackage_preferences", MODE_PRIVATE, MODE_MULTI_PROCESS)

Это то же самое, что и следующее?

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences()

1) Во втором я не могу указать флаги или есть способ их указать?

2) Нужно ли мне указывать MODE_MULTI_PROCESS, так как я просматриваю/изменяю общие настройки как из службы, так и из PreferenceActivity? Я думаю, что большую часть времени у вас есть функция PreferenceActivity, которая изменяет свойства и другую активность, которая читает/изменяет их, поэтому требуется почти всегда MODE_MULTI_PROCESS или это необходимо только тогда, когда есть несколько и, возможно, одновременный доступ к SharedPreferences (как в моем case, с фоновым сервисом, который может быть активен, пока вы редактируете настройки в PreferenceActivity)

3) Документация MODE_MULTI_PROCESS говорит, что такое поведение иногда желательно в случаях, когда приложение имеет несколько процессы, все записи в один файл SharedPreferences, означает ли это, что моя Служба и моя PreferenceActivity могут указывать разные файлы предпочтений? Как изменить имя файла предпочтения в PreferenceActivity?

4) Общие предпочтения называются таким образом, потому что они распределены между всеми компонентами (действиями, услугами и т.д.) вашего приложения, не так ли? Не общие настройки (т.е. Те, которые вы можете получить с помощью getPreferences() в вашей деятельности) локальны для компонента, который их создает, но сохраняются в том же файле * com.mypackage_preferences *? Это могло бы ответить на мои сомнения в пункте 3)

Теги:
sharedpreferences
android-preferences
preferenceactivity
android-service

2 ответа

3
Лучший ответ

Вам нужно только MODE_MULTI_PROCESS, если вы получаете доступ к настройкам из разных процессов. Если у вас просто разные действия, которые используют общие префы, вам не нужно MODE_MULTI_PROCESS.

Вы упомянули, что у вас есть служба. Пока служба работает в том же процессе, что и действия, которые вам еще не нужны MODE_MULTI_PROCESS. Служба будет работать по умолчанию в том же процессе, если вы не указали android:process="..." в теге <service> в манифесте.

  • 0
    Будет ли он выполняться в том же процессе, даже если действие будет прервано и перезапущено, а служба запущена при загрузке? Т.е. система распознает сервер и активность, принадлежащие одному и тому же пакету, а затем запускает их в одном и том же процессе? Это звучит довольно странно для меня, я думал, что они не выполняются в одном и том же процессе, потому что действие не запускает службу или, возможно, она может запустить ее, а затем ее можно убить, когда сервер все еще работает в фоновом режиме (это фоновый сервис, и я не прекращаю его, если пользователь не хочет, чтобы он был остановлен).
  • 0
    не могли бы вы вкратце объяснить, как установить атрибут android: process, чтобы указать, что я хочу, чтобы служба запускалась в другом процессе? Если я сделаю это, могу ли я избежать уничтожения службы, если пользователь уничтожит активность, запустившую ее (т. Е. Через диспетчер задач)? Кроме того, если служба запускается широковещательным приемником, который перехватывает событие BOOT_COMPLETED, то существует ли служба в своем собственном процессе и получает ли она намерения от операций, которые впоследствии вызывают startService для этой службы?
Показать ещё 7 комментариев
0

Другое большое преимущество: сбор мусора в загруженной службе не мешает анимации в пользовательском интерфейсе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню