Подтвердить что ты не робот

Общие предпочтения между двумя процессами одного и того же приложения

Я пишу приложение для Android, содержащее как пользовательский интерфейс, так и отдельные процессы. Я хочу поделиться простой информацией между основным процессом и службой, определенной в моем приложении, которая выполняется в другом процессе. Я считаю бесполезным использовать AIDL для межпроцессного общения для этой цели.

Вопрос: безопасно ли использовать общие настройки приложения для обмена данными между этими двумя процессами? Это: чтение и запись одних и тех же общих настроек.

Мне интересно, действительно ли это работает. В разработчиках android разработчики ссылаются на общие настройки (http://developer.android.com/reference/android/content/SharedPreferences.html), они заявляют: Примечание: в настоящее время этот класс не поддерживает использование нескольких процессов. Это будет добавлено позже. но я точно не знаю, что это значит.

Спасибо за помощь

4b9b3361

Ответ 1

В Android < 2.3 он работает. Один процесс может записывать изменения, а другой процесс может читать изменения. Код для чтения/записи файлов общих настроек (они фактически хранятся в файлах) проверяет, были ли какие-либо изменения, внесенные в файл перед чтением/записью, и соответственно обновили свою кэшированную версию.

В Android > 2.3 он работает, но вам нужно специально установить MODE_MULTI_PROCESS при вызове getSharedPreferences().

В Android 2.3 он сломан, и он не работает: - (

Обратите внимание, что MODE_MULTI_PROCESS устарел в уровне API 23 (Android M).

Ответ 2

Вы можете проверить https://github.com/hamsterksu/MultiprocessPreferences библиотеку, которая предоставляет API-интерфейсы, подобные SharedPreferences, для доступа к данным SharedPreferences через ContentProvider. Он также выглядит хорошим альтернативом после удаления Google MODE_MULTI_PROCESS с Android 6.

Ответ 3

Нет; это небезопасно. Указанная вами заметка верна. Известны проблемы, которые могут возникнуть, если вы попытаетесь использовать SharedPreferences для нескольких процессов. (См. https://code.google.com/p/android/issues/detail?id=66625.)

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

Я работал над этой проблемой, предотвращая одновременное обращение обоих процессов к файлу SharedPreferences. (Здесь один из способов обеспечить блокировку перекрестных процессов, и здесь полная реализация примера, которую я написал.)

Предупреждение. К сожалению, MODE_MULTI_PROCESS устарел в Android M, поэтому он может перестать работать в более позднем выпуске. Альтернативный метод, такой как использование ContentProvider, может быть лучшим вариантом.