android - 当服务作为不同进程运行时,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"/>
解决方案
如果你想在不同的进程之间可靠地共享首选项或数据,你应该使用其他SharedPreferences
的东西,比如ContentProvider
.
在 API 23 中,该MODE_MULTI_PROCESS
标志已被弃用:
应用程序不应尝试使用它。相反,他们应该使用明确的跨流程数据管理方法,例如
ContentProvider
.
如果您仍然想使用SharedPreferences
,请尝试不要为您的Service
.
推荐阅读
- node.js - win32-x64 二进制文件不能在“linux-x64”平台上使用
- c++ - 如何使用谷歌基准测试数据包处理功能?基本上是在状态约束下重复的功能?
- c# - HttpClient 发布调用
- javascript - 使用 jQuery 禁用/启用字段
- java - 在spring boot中发送成功响应后调用另一个服务?
- python - 在图像分割中 Jaccard 指数大于 Dice 系数
- android - RecyclerView 分页时在列表中间跳转
- camunda - Camunda 数据并发问题
- linux - `crontab` 什么时候听?
- php - 单击按钮后使用 PHP 将 HTML 输入到 SQL 查询中