首页 > 解决方案 > 当服务作为不同进程运行时,SharedPreference 与服务不同步

问题描述

我创建了一个服务作为一个过程。我将一些数据保存到 MyFirebaseMessagingService 类中的 Shared Preference 中。但是当我尝试在 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"/>

标签: androidservicesharedpreferences

解决方案


如果你想在不同的进程之间可靠地共享首选项或数据,你应该使用其他SharedPreferences的东西,比如ContentProvider.

在 API 23 中,该MODE_MULTI_PROCESS标志已被弃用

应用程序不应尝试使用它。相反,他们应该使用明确的跨流程数据管理方法,例如 ContentProvider.

如果您仍然想使用SharedPreferences,请尝试不要为您的Service.


推荐阅读