Android中关于SharedPreference参数的问题

news2024/11/18 5:45:42

文章目录

    • 一、前言
    • 二、问题背景
    • 三、问题定位
    • 四、问题解决

一、前言

在上周开发时遇到一个问题,记录一下:
首先描述一下应用场景:

  1. 使用sharedPreference进行存储,命名为a.xml,这里简称为a文件
  2. 有两个服务,一个是往a文件中写入数据,另一个是从a文件中取数据。(这两个服务都被我设置了属性:android:process=“:updateProcess”,android:process=“:uploadProcess”
  3. 发现问题:a文件中可以正常更新数据,使用cat发现文件中数据能够被实时更新,但是取数据总是取的过时数据(即a中已更新的数据并没有被读数据的服务获取到)。

当时寻思没道理啊,取数据的服务只有可能去读取这个a文件,为什么取的总是过时数据呢?
(而且发现有时候取数据的服务也能取到更新后的数据,但是这种情况非常少)

二、问题背景

这个问题是我在做OTA功能开发中属性上报时遇到的,我打算用一个updateService服务将设备的若干属性保存于设备的sharedPreference文件中,用一个uploadService服务将这个文件中的数据读取出来然后上传到云平台。

a文件的数据更新是实时随着设备状态更新而更新的,但是读取a文件有问题。

三、问题定位

考虑是对于SharedPreference特性不清楚导致的,于是重新翻阅了第一行代码第二版:对于sharedPreference这样阐述:
在Context类中得到SharedPreference对象可以通过getSharedPreference方法。
回顾代码:
我是这样获取的SharedPreference对象,

SharedPreferences preferences = getSharedPreferences("otaModelInfo", MODE_PRIVATE);

MODE_PRIVATE参数表示只有当前的应用程序才可以对这个SharedPreferences文件进行读写,(这里应用程序我认为不恰当,可以阐述为进程)
然后再回顾到前面我是把这两个服务分别以两个进程来运行的,所以导致了在一个服务对其进行读写的时候,另一个服务是无法读写的。
而观察到其实有MODE_WORLD_READABLE、MODE_WORLD_WRITABLE,但是这些参数都被废弃了,可以推论:以前的android系统是可以支持多进程访问sharedPreference文件的。
这里给出第一行代码中的阐述
在这里插入图片描述

四、问题解决

现在就比较明了了,将两个服务的android:process属性都去掉,就解决了设备状态延迟更新的问题。
但是如果以后需要将服务另放一个进程里运行呢?或者说当以后两个进程想同时对一个持久化存储的资源进行读写操作呢?
我认为可以考虑使用ContentProvider,这应当是一个可行的思路,ContentProvider内部实现了对于多进程读写访问的支持,后续有空也可以尝试对ContentProvider的源码进行了解和学习记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/707031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

海思nnie 部署环境 搭建流程

文章目录 在windows上安装 Ruyi studio 软件MinG-64 安装运行软件在windows上安装 Ruyi studio 软件 Hi3559A的资料包 链接:https://pan.baidu.com/s/1rQcXvLW6ruSxIs4C9cMSCg 提取码:zsq5 从百度网盘下载软件 有很多个版本, 这里我选择的是SVP_PC.part2的版本 解压后得到:…

[爬虫]解决机票网站文本混淆问题-实战讲解

前言 最近有遇到很多小伙伴私信向我求助,遇到的问题基本上都是关于文本混淆或者是字体反爬的问题。今天给大家带来其中一个小伙伴的实际案例给大家讲讲解决方法 📝个人主页→数据挖掘博主ZTLJQ的主页 ​​ 个人推荐python学习系列: ☄️爬虫J…

YOLOv8训练和预测

目录 1.源码下载 2.环境配置 3. 数据集准备 4.训练配置 5.训练时遇到的错误 1.源码下载 GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite 2.环境配置 运行环境需要的包和YOLOv5/v7一样,这里不…

C语言:移位操作注意事项

移位操作&#xff1a;因为操作符的原因&#xff0c;注意加括号。还有没必要在移位的时候进行&#xff08;uint32_t&#xff09;转换。 测试程序如下&#xff1a; #include <string.h> #include <stdlib.h> #include <stdio.h> #include <stdint.h>i…

javaweb学习3

javascript入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script type"text/javascript"> // <!-- 可以在head和body嵌入script执行顺序从上而…

KEIL5-MDK配色方案

改字体 复制如下代码&#xff0c;替换原有文件内容 global.prop文件&#xff1a;D:Keil_v5\UV4\global.prop # properties for all file types indent.automatic1 virtual.space0 view.whitespace0 view.endofline0 code.page0 caretline.visible0 highlight.matchingbraces1 …

【深度学习】日常笔记8

过拟合是指模型在训练集上表现良好&#xff0c;但在验证集和测试集上表现不佳的现象。这是因为模型在训练过程中过度学习了训练数据中的噪声和细节&#xff0c;而忽略了更一般的特征和规律&#xff0c;导致模型泛化能力不足。 具体来说&#xff0c;当模型在训练集上进行训练时&…

some files could not be transferre Xcode14.3打包问题

方法1: Command空格 搜索 该项目的 source“ ( r e a d l i n k " (readlink " (readlink"{source}”)" 替换为source“ ( r e a d l i n k − f " (readlink -f " (readlink−f"{source}”)" 即可。 方法2:切换Xcode 版本&#xff0…

C++面向对象丨4. 文件操作

操作系统&#xff1a;Windows IDE&#xff1a;Visual Studio 2019 文章目录 1 文本文件1.1 写文件1.2 写文件实例1.3 读文件1.4 读文件实例 2 二进制文件2.1 写文件2.2 写文件实例2.2 读文件2.4 读文件实例 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会…

计算机图形硬件(二) 5 - 1 视频显示设备

现在&#xff0c;计算机图形学的功能与应用已经得到了广泛承认&#xff0c;大量的图形硬件和软件系统已经应用到了几乎所有的领域。通用计算机甚至许多手持计算器也已经普遍具备二维及三维应用的图形功能。在个人计算机上也可以配用多种交互输人设备及图形软件包。对于高性能应…

校园网网络命令拓扑命令+详解集合

各位读者好&#xff0c;我发现&#xff0c;最近的收藏量比较多&#xff0c;为了大家方便&#xff0c;添加了一些各部分图和细节。 目录 配置总流程 1、总体拓扑图网段 2、命令 &#xff08;1&#xff09;内网配置 1&#xff09;二层交换机配置VLAN命令&#xff1a; 2&#x…

RabbitMQ学习笔记7(小滴课堂)SpringBoot2.X+SpringAMQP整合Rabbit

我们使用在线创建项目的方式&#xff1a; 这样就能快速的创建我们的项目了。 然后我们要去绑定我们的队列和交换机&#xff1a; 然后我们去写我们的测试类去测试一下&#xff1a; 我们去运行一下&#xff1a; 我们的依赖包不要引入错了。 我们可以看到我们的交换机和我们的队…

计算机基本组成和冯诺依曼机

计算机基本组成和冯诺依曼机 计算机的基本组成 计算机硬件组成 软件与硬件的逻辑等价性 冯诺依曼计算机硬件结构 冯诺依曼计算机工作原理 程序存储控制原理 计算机采用二进制的优势 高电平与低电平电压波动受影响的可能性会降低&#xff0c;抗干扰能力强 什么是冯诺依曼计算机…

基于无监督学习-关联规则的风险评估模型:更精准的预测!

一、引言 乳腺癌被认为是全球最常见的女性恶性肿瘤之一&#xff0c;对患者和公共健康造成了巨大的负担。准确评估乳腺癌风险是预防、诊断和治疗该疾病的关键。然而&#xff0c;乳腺癌风险估计面临着一些挑战&#xff0c;如数据的限制性、模型的复杂性和准确性等。因此&#xff…

JApiDocs|SpringBoot集成JApiDocs用以生成API文档

框架简介 JApiDocs和Swagger都是用于生成API文档的工具&#xff0c;它们各自有一些优点。下面是JApiDocs相较于Swagger的几个优点&#xff1a; 简单易用&#xff1a;JApiDocs相对来说更加简单易用&#xff0c;配置和使用都比较简单明了。它使用Java注解来描述API信息&#xff0…

手机兼职浪潮:揭秘在家赚钱的新机遇

科思创业汇 大家好&#xff0c;这里是科思创业汇&#xff0c;一个轻资产创业孵化平台。赚钱的方式有很多种&#xff0c;我希望在科思创业汇能够给你带来最快乐的那一种&#xff01; 如今&#xff0c;随着智能手机的普及和互联网的发展&#xff0c;手机兼职已经成为一种新的浪…

新加坡 PBM 是可编程数字货币的重要创新

一周以前我们在卢旺达开会的时候&#xff0c;新加坡 MAS 在现场发布了 Purpose Bound Money &#xff08;PBM&#xff09; 的技术白皮书。行业媒体发了几条新闻&#xff0c;然后就放过去了。实际上 PBM 代表着货币当局对于数字货币编程问题迄今为止最深度的思考&#xff0c;其白…

MySQL:聚合函数(全面详解)

聚合函数 前言一、聚合函数介绍1、AVG和SUM函数2、 MIN和MAX函数3、COUNT函数 二、GROUP BY1、基本使用2、使用多个列分组3、 GROUP BY中使用WITH ROLLUP 三、HAVING1、基本使用2、WHERE和HAVING的对比 四、 SELECT的执行过程1、查询的结构2、SELECT执行顺序3、SQL 的执行原理 …

论好名字的重要性: Linux内核page到folio的变迁

一、引子 Once upon a time&#xff0c;Netscape的大拿 Phil Karlton曾经说过&#xff1a;“There are only two hard things in Computer Science: cache invalidation and naming things”&#xff0c;成为程序界流传甚广的名言&#xff0c;可见取名是计算机科学中最难的两件…

使用SSH远程直连Docker容器

文章目录 1. 下载docker镜像2. 安装ssh服务3. 本地局域网测试4. 安装cpolar5. 配置公网访问地址6. SSH公网远程连接测试7.固定连接公网地址8. SSH固定地址连接测试 转载自cpolar极点云文章&#xff1a;SSH远程直连Docker容器 在某些特殊需求下,我们想ssh直接远程连接docker 容器…