SharedPreference封装

本文探讨了Android中SharedPreferences的使用方法及效率问题,并提供了一种通过版本控制来优化其读取性能的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:fiftykg blog
SharedPreference是android常用的轻量级存储方式,使用非常方便,常用来保存app的一些配置值.

但是SharedPreference的效率并不高.

SharedPreferences mSp = context.getSharedPreferences(fileName,MODE_PRIVATE);
mSp.getInt(KEY_2,DEFAULT);
mSp.getInt(KEY_1,DEFAULT);复制代码

很多app在启动过程中都会去SharedPreference中读取配置值,如上面两行代码.第一行代码执行时间为0-1毫秒忽略不计,第三行代码执行时间也为0-1毫秒,忽略不计.

但是第二行代码,也就是第一次读取SharedPreference的执行时间与文件中存储的条目数有关.

//存储简单数据,且手机运行状态良好
100条    10毫秒
1000条   60毫秒
10000条  200毫秒复制代码

如果手机运行状态差,存储复杂的数据,这个时间只会更长(复杂数据是指xml需要转义的数据).

不过一般情况,一个SharedPreference文件不会存这么多数据.但是一个老项目,四五年的发版更新,经过不知道多少人维护,可能就会出现这种情况了.

解决这个问题很简单:

  • 历史版本存储的数据该删的就删

需要对历史版本进行不同处理,从逻辑上就类似数据库的升级了.所以模仿数据库升级对SharedPreference进行封装.示例如下:

public class Config {

public static final int VERSION = 2;
private static Config sInstance;
private SharedPreferences mSp;

private Config(Context context) {
    mSp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
    checkUpdate();
}

public static Config getInstance(Context context) {
    if (sInstance == null) {
        synchronized (Config.class) {
            if (sInstance == null) {
                sInstance = new Config(context);
            }
        }
    }
    return sInstance;
}

private void checkUpdate() {
    int oldVersion = mSp.getInt(KEY_VERSION,VERSION);
    if(oldVersion < VERSION){
        onUpgrade(oldVersion, VERSION);
    }
}

private void onUpgrade(int oldVersion, int newVersion) {
    switch (oldVersion) {
        case 1:
            //do something update SharedPreferences 1 > 2
        case 2:
            //do something update SharedPreferences 2 > 3
        case 3:
            //do something update SharedPreferences 3 > 4
        case 4:
            //do something update SharedPreferences 4 > 5
        case 5:
            //do something update SharedPreferences 5 > 6

        ...

        default:
            break;
    }
}
}复制代码

以上。

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值