Android的轻量级存储SharedPreferences

希望文章能给到你启发和灵感~

感谢支持和关注~

阅读指南

序幕

近期写了个android项目,初期设计时,存储这块主要是以sqlite为主导,还使用了SharedPreferences用于存储登录和配置信息;这块我们的目的就是为了数据能在各个页面之间传递和共享;

SharedPreferences怎么存储

1、SharedPreferences以XML文件的形式存储数据,结构类似Java中Map的键值对的存储形式,这些文件通常保存在/data/data/PACKAGE_NAME/shared_prefs/目录下

SharedPreferences支持的数据类型

2、SharedPreferences支持存储Java常规的Long、Int、String等类型的数据

SharedPreferences操作模式

(1)Context.MODE_PRIVATE:这是默认的操作模式,表示该文件是私有数据,只能被应用本身访问。在该模式下,写入的内容会覆盖原文件的内容。

(2)Context.MODE_APPEND:此模式会检查文件是否存在,如果存在就往文件追加内容,否则就创建新文件

(3)Context.MODE_WORLD_READABLE 和 Context.MODE_WORLD_WRITEABLE:这两个模式分别表示当前文件可以被其他应用读取和写入。但出于安全性的考虑,这两个模式在Android 4.2版本中已经被弃用。

使用范例

第一步:获取SharedPreferences

SharedPreferences sharedPreferences = getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);

第二步:使用 SharedPreferences.Editor 存储数据

SharedPreferences.Editor editor = sharedPreferences.edit();  
editor.putString("key", "value");  
editor.putInt("key_int", 123);  
editor.apply(); // 或者使用 editor.commit(); 但 apply() 是异步的,通常更快

第三步:查询数据

String value = sharedPreferences.getString("key", "default_value");  
int valueInt = sharedPreferences.getInt("key_int", 0);

🌰:就好比我这里有记住用户的功能,使用sharedPreferences:

一、基础环境说明

考虑环境因素,大家适当的对比自己的软硬件环境情况分析~

1.1 硬件环境

MacOS Monterey 版本 12.6.8 Apple M1

1.2 软件环境

Android Studio 2021.2.1
Java 1.8.0_171

二、起因

有时候取值,界面出现卡顿现象,博主通常这里是频发,刚启动时就开始;

我们知道,android中页面的控制和跳转逻辑中,很重要的一个组件的就是Activity,开发的初期,其实博主并没有打算使用sqlite数据库,只是一股脑的想把数据存入SharedPreferences,毕竟不是特别大的项目,轻量级的存储就足够了,但是后来在app中各种事件处理过程中,频繁感觉页面时不时会有所卡顿出现;

三、解决

SharedPreferences使用的建议

3.1 尽量简化数据结构

SharedPreferences主要支持一些基础数据类型(如int, float, long, boolean)以及String的存储复杂数据并不太适合他,例如如果你存的是图像的类型,就必须对他进行数据编码转换字符串;这样就会增加了存储的复杂度和轻量级的初衷

3.2 文件尽量小

SharedPreferences创建初始化时,会将整个文件加载到内存中,所以这里如果你的文件很大,就会增加内存消耗,从而影响程序的其他操作的运行,导致程序崩溃或者卡顿问题;

3.3 减少保存的频率

尽量减少对SharedPreferences的编辑(edit)和提交(commit/apply)操作

每次edit都会创建一个新的EditorImpl对象,额外占据内存

commit/apply操作涉及IO操作,多次执行会影响性能

3.4 加载时机和性能考虑

避免在UI线程中执行大量的SharedPreferences操作,因为这可能导致界面卡顿;

提前初始化SharedPreferences,避免在首次创建时因读取文件而导致的等待情况

四、总结

SharedPreferences其实在某种形式上有点类似我们的redis,虽然没有那么强大,但是对于简单的配置信息保存是足够的,毕竟他的定位就是简单和轻量级;

保存SharedPreferences时apply() 和 commit() 方法的区别在于:apply() 是异步的,而 commit() 是同步的。因此,apply() 通常更快,但在某些情况下,你可能需要 commit() 的同步行为。

SharedPreferences 不适合存储大量数据或复杂的数据结构。对于这种情况,我们应该考虑使用 SQLite 数据库或其他存储解决方案。

相关推荐
数据猎手小k1 小时前
AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
android·人工智能·机器学习·语言模型
你的小102 小时前
JavaWeb项目-----博客系统
android
风和先行2 小时前
adb 命令查看设备存储占用情况
android·adb
无尽的大道3 小时前
Java反射原理及其性能优化
jvm·性能优化
AaVictory.3 小时前
Android 开发 Java中 list实现 按照时间格式 yyyy-MM-dd HH:mm 顺序
android·java·list
似霰4 小时前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder
大风起兮云飞扬丶4 小时前
Android——网络请求
android
干一行,爱一行4 小时前
android camera data -> surface 显示
android
断墨先生4 小时前
uniapp—android原生插件开发(3Android真机调试)
android·uni-app
无极程序员6 小时前
PHP常量
android·ide·android studio