Android SharedPreference使用

SharedPreference的get操作对性能有什么影响?

SharedPreferences的get方法在Android平台上一般被认为是线程安全的。它们使用内部锁机制,以确保在多线程环境中对SharedPreferences实例的读取操作是串行化的。这意味着同时对同一个SharedPreferences实例的读取操作会被同步执行,一次只允许一个线程进行读取。

然而,在标准的get操作(如getBoolean, getString, getInt等)中,并不会有显著的"阻塞"。当我们谈论阻塞时,通常是指等待一个数量有限的资源,比如文件写入。由于读取操作通常不涉及对共享资源的修改,因此它们可以相对快速地完成,并且通常不会在性能上成为一个瓶颈。

不过,需要注意的是,如果一个线程在进行写操作commit()或者apply()时,想要确保读取到最新的值,其他线读取操作可能会等待写操作完全完成。commit()是同步执行并立即写入磁盘的,所以它会阻塞调用线程直到写操作完成,而apply()是异步执行的,不会阻塞调用线程,但也需要等待实际的磁盘写操作在后台完成。

如果读操作需要等待正在发生的写操作,那么就可能出现短暂的等待时间。但是,由于SharedPreferences通常是用来存储轻量级的配置数据,并且设计上也有一定的内存缓存机制,所以这种等待通常不会对应用程序的响应能力造成显著影响。在正常情况下,读取操作非常快,而不会造成用户可感知的阻塞。

然而,如果你的应用在一个高频的读/写环境中使用SharedPreferences,或者你正在操作大量数据,建议重新评估你的用例,考虑使用其他数据存储方案,比如SQLite数据库,它可以更好地处理高频率、高容量的数据操作,并提供更复杂的查询支持。

参考资料

Android 性能优化篇之SharedPreferences使用优化

https://juejin.cn/post/7110618131000721416

SharedPreferences灵魂拷问之原理

https://juejin.cn/post/6844904022063710221

相关推荐
韩曙亮22 分钟前
【错误记录】安卓 adb 调试 5037 端口占用排查 ( adb 的三层结构 | 找出本机占用 5037 的进程 )
android·数据库·adb·安卓·错误记录
三少爷的鞋1 小时前
不改变异步本质,只改变代码组织:Telegram 项目的 Kotlin 协程实践
android
好的佩奇10 小时前
蓝牙之广播与扫描
android·flutter·蓝牙
传奇开心果编程12 小时前
【Jetpack Compose娓娓道来】第36课:焦点管理与键盘输入——让遥控器、键盘和输入法都“找得到北”
android·kotlin·移动开发·交互·android jetpack·ui框架·声明式ui
hai_android13 小时前
AudioTrack 深度解析:从原理到实战
android·java·kotlin
红尘伴蝶舞13 小时前
从秒开优化到连环崩溃:深入剖析 ViewPager2 在常驻 DialogFragment 中的复用陷阱与自愈方案
android·kotlin
巫山老妖17 小时前
Android 应用架构演进:MVC / MVP / MVVM / MVI (2026)
android·android jetpack
木头左1 天前
【架构设计】教育类 App 服务端化改造:AI 上移、题库分层与个人题库归属
android·架构设计·系统设计·后端开发·数据库设计
墨狂之逸才1 天前
USB 的 HOST 和 DEVICE 到底有什么区别?ADB 调试应该选哪个?
android
奶油话梅糖1 天前
苹果的内核跑上了安卓手机:2,631 Star 的 HakiOS 让 XNU 在 Adreno GPU 上画出 118 帧
android·macos·智能手机