SharedPreferences如何重视检索工作“引擎盖下”

时间:2018-02-09 19:15:56

标签: android sharedpreferences android-sharedpreferences

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

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

任何人都可以在“引擎盖下”澄清这是如何运作的吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

  

是否将整个xml文件加载到内存中,然后搜索密钥......?

是的,至少在the standard implementation。从技术上讲,<body> <div class="wrapper"> <div class="container__light position-center"> <div class="light light-red"> </div> <div class="light light-yellow"> </div> <div class="light light-green"> </div> <button class="btn">On/Off</button> </div> </div> </body>是一个界面,但AFAIK SharedPreferencesSharedPreferencesImpl用于Context等方法的实现。

答案 1 :(得分:2)

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

至于具体问题,SharedPreferencesImpl(由CommonsWare指出是由SharedPreferences返回的Context的实现)仅在构造函数中加载文件以及文件何时更改。在阅读值时,性能应该非常接近直接从HashMap

读取

如果你正在写作,那么当你在apply上拨打commitEditor但是使用{{}时,它会写整个文件 1}}将异步执行此操作。