SharedPreferences 优化

SharedPreferences 是一种简单便捷的存储方式,在 Android 应用中,常用来存储一些简单配置信息,例如保存应用中的一个开关状态和一些数据的独家属性等.

  • 特点

用 Map 数据结构来存储数据,以键值(Key-Value)的方式存储,可以简单地读取与写入;数据读取与写入的方法都非常简单。

  • 存储路径

SharedPreferences 将数据保存到一个 XML 文件中,该文件位于/data/data/PackageName/shares_prefs 下。

  • 创建模式
  • Activity.MODE_APPEND:如果该文件已经存在,就将数据写入,而不是抹掉现有文件
    的末尾。
  • Activity.MODE_PRIVATE:默认模式,只能由创建该文件的应用程序调用,即为私有的。
  • Activity.MODE_WORLD_READABLE:允许所有其他应用程序读取和创建文件的权限。
  • Activity.MODE_WORLD_WRITEABLE:允许所有其他应用程序具有写入、访问和创建的文件权限。

SharedPreferences 的最大优点就是使用简单,速度也快,是一些配置数据的首选存储方式。比如创建一个私有的 SharedPreferences,如下代码就可以实现 SharedPrefenrences 的创建与读写功能。

		SharedPreferences sp = context.getSharedPreferences("fileName", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        // 存储
        editor.putString("key","value");
        // 提交
        editor.commit();
        // 读取
        sp.getString("key",null);

SharedPreferences 实际上是对一个 XML 文件存储 key-value 键值对,每一次的 commit和 apply 操作都是一次 I/O 写操作。众所周知,I/O 操作是最慢的操作之一,在主线程中操作会导致主线程缓慢。SharedPreferences 性能优化主要是两个方面:

  • IO 性能。
  • 同步锁问题。

IO 性能瓶颈是导致 SharedPreferences 性能差最大的原因,SharedPreferences 上的 IO 分为读取数据到内存与数据写入磁盘两种情况。

  • 当 SharedPreferences 文件还没有被加载到内存时,调用 getSharedPreferences 方法会初始化文件并读入内存,这容易导致耗时更长。
  • Editor 的 commit 或者 apply 方法每次执行时,同步写入磁盘耗时较长。

需要说明的是,editor 的 commit 和 apply 方法的区别在于同步写入和异步写入,以及是否需要返回值。在不需要返回值的情况下,使用 apply 方法可以极大提高性能。

另一方面就是同步锁的问题,Put()和 getEditor()方法会锁定 Editor 对象,在写入磁盘时更会锁定一个写入锁。

因此,最好的优化方法就是避免频繁地读写 SharedPreferences,减少无谓的调用,如下伪代码在同一生命周期内,SharedPreferences 读一次即可。

if(开关未读取过&没有发生过变化){
	........
}

而对于 SharedPreferences 的批量操作,最好先获取一个 editor,进行批量操作,然后调用 apply 方法。这样会比 commit 方法略快。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值