返回

读源码 | SharedPreferences 源码解析(上)

Android

Android 中的 SharedPreferences 是一种简单易用的数据持久化方式,它通过 XML 文件存储键值对,非常适合存储应用配置等简单数据。尽管 SharedPreferences 使用起来非常简单,但其源码实现却颇有研究价值,在面试中也经常会被问到。

SharedPreferences 的核心类位于 android.content.SharedPreferences 中,它定义了所有与 SharedPreferences 相关的接口和实现。这个类主要提供了以下功能:

  • 获取和设置 SharedPreferences 中的键值对
  • 监听 SharedPreferences 的更改
  • 删除 SharedPreferences 中的键值对
  • 清除 SharedPreferences 中的所有数据

SharedPreferences 的实现基于 XML 文件,它会将所有键值对存储在一个名为 "shared_prefs" 的 XML 文件中。这个文件通常位于应用的私有数据目录中。

SharedPreferences 的使用非常简单,首先需要获取一个 SharedPreferences 实例,然后就可以通过 get() 和 put() 方法来获取和设置键值对。例如:

SharedPreferences sharedPreferences = getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
sharedPreferences.putString("name", "John Doe");

SharedPreferences 还支持监听键值对的更改,可以通过 registerOnSharedPreferenceChangeListener() 方法来注册监听器。当 SharedPreferences 中的键值对发生更改时,监听器就会被触发。

sharedPreferences.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        // Handle preference change
    }
});

SharedPreferences 是一种非常方便的数据持久化方式,非常适合存储简单的键值对数据。它使用简单,性能良好,并且非常适合在 Android 应用中使用。

SharedPreferences 源码解析

SharedPreferences 的源码实现主要位于 android.content.SharedPreferencesImpl 类中。这个类实现了 SharedPreferences 接口,并提供了所有与 SharedPreferences 相关的功能。

SharedPreferencesImpl 类中最重要的几个方法包括:

  • get() :获取 SharedPreferences 中指定键对应的值
  • put() :在 SharedPreferences 中设置指定键对应的值
  • registerOnSharedPreferenceChangeListener() :注册 SharedPreferences 更改监听器
  • unregisterOnSharedPreferenceChangeListener() :注销 SharedPreferences 更改监听器

这些方法的实现都比较简单,主要就是对 XML 文件进行读写操作。

get() 方法

get() 方法用于获取 SharedPreferences 中指定键对应的值。如果指定的键不存在,则返回 null。

@Override
public Object get(String key) {
    synchronized (mLock) {
        return mMap.get(key);
    }
}

put() 方法

put() 方法用于在 SharedPreferences 中设置指定键对应的值。如果指定的键不存在,则会新建一个键值对。

@Override
public void putString(String key, String value) {
    synchronized (mLock) {
        mMap.put(key, value);
        mEditor.putString(key, value);
    }
}

registerOnSharedPreferenceChangeListener() 方法

registerOnSharedPreferenceChangeListener() 方法用于注册 SharedPreferences 更改监听器。当 SharedPreferences 中的键值对发生更改时,监听器就会被触发。

@Override
public void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
    synchronized (mLock) {
        mListener = listener;
    }
}

unregisterOnSharedPreferenceChangeListener() 方法

unregisterOnSharedPreferenceChangeListener() 方法用于注销 SharedPreferences 更改监听器。

@Override
public void unregisterOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
    synchronized (mLock) {
        mListener = null;
    }
}

SharedPreferences 的源码实现相对简单,主要就是对 XML 文件进行读写操作。通过对源码的分析,我们可以更深入地了解 SharedPreferences 的工作原理,从而更好地使用 SharedPreferences 来存储数据。

总结

SharedPreferences 是 Android 中一种简单易用的数据持久化方式,非常适合存储简单的键值对数据。它使用简单,性能良好,并且非常适合在 Android 应用中使用。通过对 SharedPreferences 源码的分析,我们可以更深入地了解 SharedPreferences 的工作原理,从而更好地使用 SharedPreferences 来存储数据。