SharedPreferences 值检索如何工作 "under the hood"

How does SharedPreferences value retrieval work "under the hood"

共享首选项作为键值对存储在 xml 文件中。这是事实。 我还没有找到关于击球手的任何文档,但是......当试图找到并加载某个键的值时,它实际上是如何在 xml 中查找键的?它是将整个 xml 文件加载到内存中然后搜索密钥,还是使用其他对内存更友好的方法来遍历每个密钥?

我遇到了一个应用程序,它在共享首选项中存储大量键值对而不是使用数据库(有很多!)我的直觉是这非常占用内存,因为它将将整个文件加载到内存中只是为了检索特定项目。

谁能解释一下这是如何工作的"under the hood"?

谢谢!

Does it load the entire xml file into memory and then searches for the key...?

是的,至少在 the standard implementation。从技术上讲,SharedPreferences 是一个接口,但 AFAIK SharedPreferencesImplContext 用于 getSharedPreferences().

等方法的实现

如果您对 SDK classes 的实现感到好奇,您可以直接使用 Android Studio 下载源代码。您可以按住 ctrl 并左键单击 SDK class 并直接跳转到代码,甚至可以查找用法并按名称查找 classes。如果您从未做过,我真的会推荐它,它非常方便。

具体问题,SharedPreferencesImpl(CommonsWare指出是Context返回的SharedPreferences的实现)只在构造函数中加载文件,当文件加载时变化。当读取值时,性能应该非常接近直接从 HashMap

读取

如果您正在写入,当您在 Editor 上调用 applycommit 时,它将写入 整个文件 ,但是使用 apply 将异步执行此操作。