返回

Android Q 中如何取代弃用的 PreferenceManager.getDefaultSharedPreferences 方法?

Android

Android Q 中取代弃用的 PreferenceManager getDefaultSharedPreferences

问题:

在 Android 10(API 29)中,PreferenceManager.getDefaultSharedPreferences 方法已被弃用。它曾用于获取默认共享首选项对象,存储应用程序设置和用户偏好。

原因:

弃用的原因在于,在多进程应用程序中使用该方法存在安全隐患。多进程架构中的每个进程都有自己的首选项对象,使用默认共享首选项对象可能导致进程间冲突和数据泄露。

替代方案:

为了取代 PreferenceManager.getDefaultSharedPreferences,Android 10 引入了两个新方法:

  • Context.getSharedPreferences(String, int) 获取特定名称和模式的共享首选项对象。
  • PreferenceManager.getDefaultSharedPreferences(Context) 获取特定上下文对象的默认共享首选项对象。

迁移指南:

1. 获取特定名称的共享首选项:

SharedPreferences sharedPreferences = getSharedPreferences("my_preferences", Context.MODE_PRIVATE);

2. 获取默认共享首选项:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

操作方式:

使用 getSharedPreferences() 方法获取特定名称的共享首选项对象,指定名称和模式参数。使用 getDefaultSharedPreferences() 方法获取特定上下文对象的默认共享首选项对象。

访问和操作首选项值的方式与以前相同,包括 getString()getInt()putBoolean() 方法。

结论:

迁移到新 API 可以确保你的应用程序在 Android Q 及更高版本中继续平稳运行。通过了解弃用原因并遵循提供的迁移指南,你可以轻松地过渡到 Context.getSharedPreferencesPreferenceManager.getDefaultSharedPreferences 方法。

常见问题解答:

  1. 为什么 PreferenceManager.getDefaultSharedPreferences 在 Android Q 中被弃用?

它被弃用是为了解决在多进程应用程序中使用它存在的安全隐患。

  1. 如何获取特定名称的共享首选项对象?

使用 Context.getSharedPreferences(String, int) 方法。

  1. 如何获取特定上下文对象的默认共享首选项对象?

使用 PreferenceManager.getDefaultSharedPreferences(Context) 方法。

  1. 是否需要对现有代码进行重大更改?

不需要,只需要将 PreferenceManager.getDefaultSharedPreferences 调用替换为适当的新方法即可。

  1. 这些更改对我的应用程序有何影响?

迁移到新 API 可以提高应用程序在 Android Q 及更高版本的安全性。