onSharedPreferenceChanged () не запускается при наблюдении из отдельных процессов - PullRequest
1 голос
/ 11 декабря 2019

У меня есть приложение, которое состоит из двух отдельных процессов;основное приложение и фоновая служба, в которой отдельный манифест определен с помощью android:process=":process_name" в манифесте.

При использовании SharedPreferences я наблюдаю, что могу сохранять и загружать значения в одном процессе и извлекать их вдругой процесс полностью в порядке.

Основная активность:

override fun onStart() {
    // ...
    val prefs = getSharedPreferences(PREFERENCES_ID, Context.MODE_PRIVATE)
    val editor = prefs.edit()
    editor.putInt("TEST", 42)
    editor.commit()
}

Служба:

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    // ...
    val prefs = getSharedPreferences(PREFERENCES_ID, Context.MODE_PRIVATE)
    val retrieved = prefs.getInt("TEST", -1)
    Log.d("Service", "Retrieved $retrieved") // prints "Retrieved 42"
}

Однако при регистрацииOnSharedPreferenceChangeListener чтобы наблюдать за этими изменениями как в активности, так и в сервисе, я получаю только изменения моего экземпляра SharedPreferences в процессе, в который было внесено изменение. (Это также происходит при создании экземпляра общих настроек с помощью Activity / Service applicationContext.)

Я также отмечаю, что такое поведение не происходит при удалении директивы android:process в манифесте, что приводит меня кПоверьте, разные процессы вызывают это поведение.

  1. Есть ли какая-то разница в том, как изменения передаются слушателям через разные процессы?
  2. Можно ли наблюдать за этими изменениями в разных процессах?

(я подтверждаю, что могу переместить свое приложение в отдельный процесс или реализовать «измененный»)сообщение какого-то другого типа через IPC, например Messenger, каждый раз, когда мой код вносит изменения в SharedPreferences, однако это не очень привлекательные варианты для этого приложения.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...