问题来源:

在项目开发中部分接口token显示为空,最终导致用户无法使用,而我们的token都是在获取之放到缓存中的,代码反复检查也没有发现问题的解决办法,最后查阅资料把问题根源锁定到SharePreferences缓存的上,

public class SpUtils {private static final String spFileName = "app";//使用SharedPreferencespublic static String getString(Context context, String strKey) {SharedPreferences setPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);String result = setPreferences.getString(strKey, "");return result;}public static String getString(Context context, String strKey,String strDefault) {SharedPreferences setPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);String result = setPreferences.getString(strKey, strDefault);return result;}public static void putString(Context context, String strKey, String strData) {SharedPreferences activityPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);SharedPreferences.Editor editor = activityPreferences.edit();editor.putString(strKey, strData);editor.commit();}
}

我平时代码中创建的SharedPreferences文件的类型都是MODE_PRIVATE

Mode的不同类型所代表的含义:

MODE_PRIVATE:代表私有访问模式,在Android 2.3及以前这个访问模式是可以跨进程的,之后的版本这个模式就只能访问同一进程下的数据.

MODE_MULTI_PROCESS:在Android 2.3及以前,这个标志位都是默认开启的,允许多个进程访问同一个SharedPrecferences对象。而Android 2.3以后的版本,须将MODE_MULTI_PROCESS这个值传递给mode参数,才能开启多进程访问。

MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取

MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入

细细分析出现token为空的的地方都是可能出现跨进程操作的地方,在Android 2.3及以前情况会出现一个进程未执行完,就进行了另一个进程,导致缓存数据丢失

解决办法:

1.token在获取之后保存到数据库中,在使用token的地方先到缓存中查询,缓存不存在,再到数据库查询
2.MODE的类型由MODE_PRIVATE变成MODE_MULTI_PROCESS

SharePreferences数据丢失问题的处理和解决方案相关推荐

  1. 制定数据丢失防范策略的六个要点

    数据丢失问题如今已经成为广大企业最关心的焦点问题之一,为了降低这个问题所带来的风险,各企业都在努力寻找一种适合自己的数据丢失防范(Data Loss Prevention)策略.数据丢失防范策略(以下 ...

  2. 政务云存储 备份方案_在线云存储是否比远程备份解决方案更好?

    政务云存储 备份方案 Choosing a backup solution for business can lead you down one of two roads, cloud storage ...

  3. mach3软件常见问题和解决方案

    Mach3是一款流行的CNC控制软件,可以使用户将计算机转换为数控机床控制器.尽管该软件功能强大,但在使用过程中仍然会遇到一些常见问题.在本文中,我们将介绍一些常见问题及其解决方案,帮助用户更好地使用 ...

  4. 启动优化·基础论·浅析 Android 启动优化

    " [小木箱成长营]启动优化系列文章(排期中): 启动优化 · 工具论 · 启动优化常见的六种工具 启动优化 · 方法论 · 这样做启动优化时长降低 70% 启动优化 · 实战论 · 手把手 ...

  5. 数据恢复工具有哪些? 十个最好的数据恢复软件

    您不想在丢失重要文件时措手不及.相反,您希望系统上已经安装了可靠的数据恢复软件,本文旨在帮助您选择最适合您的解决方案. 数据恢复软件选择标准 以下是从竞争中描述顶级数据恢复软件的一些关键方面. ⚙️性 ...

  6. 黑客安全专家郭盛华:逃避僵尸网络恶意软件攻击的13种方法

    网络罪犯是忙于创新的人,正在调整他们的武器和攻击策略,并且无情地漫游网络以寻找下一个高分.敏感信息的每种方式,例如机密的员工记录,客户的财务数据,受保护的医疗文件和企业私密文件,都面临着对网络安全的无 ...

  7. Apache Doris在蜀海供应链的实践

    ​ Apache Doris 代码仓库地址:apache/incubator-doris 欢迎大家关注加星 概述 最早接触doris是在2020年初,当时是为了解决在海量数据上实时高并发查询的问题,当 ...

  8. 螣龙安科:在线协作平台的安全建议

    随着组织在大规模远程工作期间大幅度扩展协作平台的使用,了解和管理此类平台可能带来的风险至关重要.公司可以通过执行安全评估,正确实施最佳实践以及部署其他安全控制措施来解决这些问题.在使用协作工具时,必须 ...

  9. 总结使用libwebsockets开发接入层

    作者:邹祁峰 邮箱:Qifeng.zou.job@hotmail.com 博客:http://blog.csdn.net/qifengzou 日期:2015.12.13~2015.12.14 转载请注 ...

最新文章

  1. 常见数字IC设计、FPGA工程师面试题
  2. 【Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )
  3. SpringMvc入门教程
  4. strcpy和strcmp——调用库函数快速操作字符数组
  5. 【MFC】在工具栏中添加编辑框
  6. 7月30日 举办专注于微服务的.NET Conf Focus
  7. linux下python开发环境搭建_linux下python开发环境之二——安装Eclipse+PyDev
  8. 微服务精华问答:什么是微服务架构中的DRY?| 技术头条
  9. IT人员看待和预防癌症十大建议
  10. 错误 C2628 “Wall”后面接“int”是非法的(是否忘记了“;”?)
  11. 艾伟也谈项目管理,我的项目管理观点
  12. Qt开发植物大战僵尸第一篇
  13. java中的方法重载
  14. python语句分号_你知道分号在各种编程语言中的作用吗?
  15. Oracle数据库(定义、特点、体系结构)
  16. 浏览器渲染流水线解析与网页动画性能优化
  17. 查询最后一次消费记录
  18. Microsoft Edge浏览器网页改为纯黑色(将浏览器网页底色改为黑色)
  19. 沃丰科技AI助力客户服务数字化转型加速
  20. 使用Qt通过Post发送Json格式数据

热门文章

  1. 相约 | 2021全球C++及系统软件技术大会将于12月上海隆重召开
  2. EJB: @Transient private String bdate,edate;
  3. MySQL主键的的如何修改
  4. 用户联网思想武装自己
  5. 【AE2022笔记】001:时间轴面板的五大属性
  6. 实现 英雄联盟 摄像机移动方式
  7. android标题栏添加按钮_Android和iOS设计差异点有哪些?
  8. 系统设计(四) 设计Instagram
  9. windos7升级win10没有推送开关
  10. Codeup之那些曾经的非主流