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 SharedPreferencesImpl
是 Context
用于 getSharedPreferences()
.
等方法的实现
如果您对 SDK classes 的实现感到好奇,您可以直接使用 Android Studio 下载源代码。您可以按住 ctrl 并左键单击 SDK class 并直接跳转到代码,甚至可以查找用法并按名称查找 classes。如果您从未做过,我真的会推荐它,它非常方便。
具体问题,SharedPreferencesImpl
(CommonsWare指出是Context
返回的SharedPreferences
的实现)只在构造函数中加载文件,当文件加载时变化。当读取值时,性能应该非常接近直接从 HashMap
读取
如果您正在写入,当您在 Editor
上调用 apply
或 commit
时,它将写入 整个文件 ,但是使用 apply
将异步执行此操作。
共享首选项作为键值对存储在 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 SharedPreferencesImpl
是 Context
用于 getSharedPreferences()
.
如果您对 SDK classes 的实现感到好奇,您可以直接使用 Android Studio 下载源代码。您可以按住 ctrl 并左键单击 SDK class 并直接跳转到代码,甚至可以查找用法并按名称查找 classes。如果您从未做过,我真的会推荐它,它非常方便。
具体问题,SharedPreferencesImpl
(CommonsWare指出是Context
返回的SharedPreferences
的实现)只在构造函数中加载文件,当文件加载时变化。当读取值时,性能应该非常接近直接从 HashMap
如果您正在写入,当您在 Editor
上调用 apply
或 commit
时,它将写入 整个文件 ,但是使用 apply
将异步执行此操作。