当服务作为其他进程运行时,SharedPreference未与Service同步

时间:2018-09-25 09:13:05

标签: android service sharedpreferences

我已将服务创建为流程。我将一些数据保存到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"/>

1 个答案:

答案 0 :(得分:0)

如果您想在不同进程之间可靠地共享首选项或数据,则应使用SharedPreferences以外的其他名称,例如ContentProvider

在API 23中,MODE_MULTI_PROCESS标志was deprecated

  

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

如果您仍然想使用SharedPreferences,请不要对Service使用专用的过程。