SharedPreference не синхронизируется со службой, когда служба запускается как другой процесс - PullRequest
0 голосов
/ 25 сентября 2018

Я создал сервис как процесс.Я сохраняю некоторые данные в Shared Preference внутри класса MyFirebaseMessagingService.Но когда я пытаюсь получить эти данные внутри MyService, он возвращает пустое значение.

Для сохранения данных я использую этот код

val preferences = getSharedPreferences("Sample", Context.MODE_PRIVATE)
val editor = preferences?.edit()
editor?.putString("shiftStartTime", map["shift_start_time"].toString())
editor?.putString("shiftEndTime", map["shift_end_time"].toString())
editor?.commit()

Вот код для доступа к данным в службе

 override fun onCreate() {
    Log.e(TAG, "onCreate")
    initializeLocationManager()

    mPreferences = getSharedPreferences("Sample", Context.MODE_PRIVATE)
 }
  override fun onLocationChanged(location: Location) {
        Log.e(TAG, "onLocationChanged: $location")
       val startTime = mPreferences!!.getString("shiftStartTime", "") 
     // This Start time always return as empty
 }

Вот декларация файла манифеста

 <service
  android:name=".location.MyService"
  android:process=":my_service"/>

1 Ответ

0 голосов
/ 25 сентября 2018

Если вы хотите надежно обмениваться настройками или данными между различными процессами, вам следует использовать что-то отличное от SharedPreferences, например ContentProvider.

В API 23 флаг MODE_MULTI_PROCESS устарел:

Приложения не должны пытаться использовать его.Вместо этого им следует использовать явный межпроцессный подход к управлению данными, такой как ContentProvider.

Если вы все же хотите использовать SharedPreferences, попробуйте не использовать выделенный процесс для Service.

...