读源码 | SharedPreferences 源码解析(上)
2023-11-04 09:11:31
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 来存储数据。