Я создаю приложение с 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)
Вам нужно только MODE_MULTI_PROCESS
, если вы получаете доступ к настройкам из разных процессов. Если у вас просто разные действия, которые используют общие префы, вам не нужно MODE_MULTI_PROCESS
.
Вы упомянули, что у вас есть служба. Пока служба работает в том же процессе, что и действия, которые вам еще не нужны MODE_MULTI_PROCESS
. Служба будет работать по умолчанию в том же процессе, если вы не указали android:process="..."
в теге <service>
в манифесте.
Другое большое преимущество: сбор мусора в загруженной службе не мешает анимации в пользовательском интерфейсе.