SharePreferences数据丢失问题的处理和解决方案
问题来源:
在项目开发中部分接口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数据丢失问题的处理和解决方案相关推荐
- 制定数据丢失防范策略的六个要点
数据丢失问题如今已经成为广大企业最关心的焦点问题之一,为了降低这个问题所带来的风险,各企业都在努力寻找一种适合自己的数据丢失防范(Data Loss Prevention)策略.数据丢失防范策略(以下 ...
- 政务云存储 备份方案_在线云存储是否比远程备份解决方案更好?
政务云存储 备份方案 Choosing a backup solution for business can lead you down one of two roads, cloud storage ...
- mach3软件常见问题和解决方案
Mach3是一款流行的CNC控制软件,可以使用户将计算机转换为数控机床控制器.尽管该软件功能强大,但在使用过程中仍然会遇到一些常见问题.在本文中,我们将介绍一些常见问题及其解决方案,帮助用户更好地使用 ...
- 启动优化·基础论·浅析 Android 启动优化
" [小木箱成长营]启动优化系列文章(排期中): 启动优化 · 工具论 · 启动优化常见的六种工具 启动优化 · 方法论 · 这样做启动优化时长降低 70% 启动优化 · 实战论 · 手把手 ...
- 数据恢复工具有哪些? 十个最好的数据恢复软件
您不想在丢失重要文件时措手不及.相反,您希望系统上已经安装了可靠的数据恢复软件,本文旨在帮助您选择最适合您的解决方案. 数据恢复软件选择标准 以下是从竞争中描述顶级数据恢复软件的一些关键方面. ⚙️性 ...
- 黑客安全专家郭盛华:逃避僵尸网络恶意软件攻击的13种方法
网络罪犯是忙于创新的人,正在调整他们的武器和攻击策略,并且无情地漫游网络以寻找下一个高分.敏感信息的每种方式,例如机密的员工记录,客户的财务数据,受保护的医疗文件和企业私密文件,都面临着对网络安全的无 ...
- Apache Doris在蜀海供应链的实践
Apache Doris 代码仓库地址:apache/incubator-doris 欢迎大家关注加星 概述 最早接触doris是在2020年初,当时是为了解决在海量数据上实时高并发查询的问题,当 ...
- 螣龙安科:在线协作平台的安全建议
随着组织在大规模远程工作期间大幅度扩展协作平台的使用,了解和管理此类平台可能带来的风险至关重要.公司可以通过执行安全评估,正确实施最佳实践以及部署其他安全控制措施来解决这些问题.在使用协作工具时,必须 ...
- 总结使用libwebsockets开发接入层
作者:邹祁峰 邮箱:Qifeng.zou.job@hotmail.com 博客:http://blog.csdn.net/qifengzou 日期:2015.12.13~2015.12.14 转载请注 ...
最新文章
- 常见数字IC设计、FPGA工程师面试题
- 【Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )
- SpringMvc入门教程
- strcpy和strcmp——调用库函数快速操作字符数组
- 【MFC】在工具栏中添加编辑框
- 7月30日 举办专注于微服务的.NET Conf Focus
- linux下python开发环境搭建_linux下python开发环境之二——安装Eclipse+PyDev
- 微服务精华问答:什么是微服务架构中的DRY?| 技术头条
- IT人员看待和预防癌症十大建议
- 错误	C2628	“Wall”后面接“int”是非法的(是否忘记了“;”?)
- 艾伟也谈项目管理,我的项目管理观点
- Qt开发植物大战僵尸第一篇
- java中的方法重载
- python语句分号_你知道分号在各种编程语言中的作用吗?
- Oracle数据库(定义、特点、体系结构)
- 浏览器渲染流水线解析与网页动画性能优化
- 查询最后一次消费记录
- Microsoft Edge浏览器网页改为纯黑色(将浏览器网页底色改为黑色)
- 沃丰科技AI助力客户服务数字化转型加速
- 使用Qt通过Post发送Json格式数据