Android每日一问笔记-对于SharedPreferences的优缺点?

基于https://www.wanandroid.com每日一问的笔记,做一些整理,方便自己进行查看和记忆。

原文链接:https://www.wanandroid.com/wenda/show/8656

SharedPreferences,它是一个轻量级的存储类,特别适合用于保存软件配置参数

  • 优点:
  1. 轻量级,以键值对的方式进行存储,使用方便,易于理解
  2. 采用的是xml文件形式存储在本地,程序卸载后会也会一并被清除,不会残留信息
  • 缺点:
  1. 由于是对文件IO读取,因此在IO上的瓶颈是个大问题,因为在每次进行get和commit时都要将数据从内存写入到文件中,或从文件中读取
  2. 多线程场景下效率较低,在get操作时,会锁定SharedPreferences对象,互斥其他操作,而当put,commit时,则会锁定Editor对象,使用写入锁进行互斥,在这种情况下,效率会降低
  3. 不支持跨进程通讯
    4.由于每次都会把整个文件加载到内存中,因此,如果SharedPreferences文件过大,或者在其中的键值对是大对象的json数据则会占用大量内存,读取较慢是一方面,同时也会引发程序频繁GC,导致的界面卡顿。
  • 建议
  1. 建议不要存储较大数据或者较多数据到SharedPreferences中
  2. 频繁修改的数据修改后统一提交,而不是修改过后马上提交
  3. 在跨进程通讯中不去使用SharedPreferences
  4. 键值对不宜过多

关于SharedPreference.Editor的apply()和commit()方法异同

在androidstudio上coding经常会提示一些警告,通过它我们能了解到一些自己不了解的好的编程习惯和少用的方法,本次发现就是一个例子,用习惯了SharedPreference.Editor的commit()方法,但是在studio提示使用apply()方法替换,看到apply()方法有点不知所措,因为根本不了解这个方法的作用随即翻阅android的api和google了一下apply()和commit()两者的区别。
首先,两者都能实现shared存储的功能,但是两者还是有着一些不同

  • 简书

  • apply方法是将share的修改提交到内存而后异步写入磁盘,但是commit是直接写入磁盘,这就造成两者性能上的差异,犹如apply不直接写入磁盘而share本身是单例创建,apply方法会覆写之前内存中的值,异步写入磁盘的值只是最后的值,而commit每次都要写入磁盘,而磁盘的写入相对来说是很低效的,所以apply方法在频繁调用时要比commit效率高很多。

  • apply虽然高效但是commit也有着自己的优势那就是它可以返回每次操作的成功与否的返回值,根据它我们就可以在操作失败时做一些补救操作。
    综上,studio提示我们使用apply是在效率上的优化考虑,但是如果你很重视share是否成功操作,并希望在失败时做相应的提示或者补救commit还是更好的选择。

  • stack overflow

  • apply() was added in 2.3, it commits without returning a boolean indicating success or failure.

  • commit() returns true if the save works, false otherwise.

  • apply() was added as the Android dev team noticed that almost no one took notice of the return value, so apply is faster as it is asynchronous.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值