首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SharedPreferences - Android

SharedPreferences - Android
EN

Stack Overflow用户
提问于 2016-03-24 13:19:17
回答 3查看 172关注 0票数 3

我对SharedPreferences in Android有一点怀疑。

要删除一个偏好,我们主要有两种选择:

第一:

代码语言:javascript
复制
SharedPreferences.Editor edit = (Editor) getSharedPreferences(Constants.APP_DEFAULT_PREF, MODE_PRIVATE).edit();
edit.putString(Constants.PREF_ACC, null);
edit.commit();

第二:

代码语言:javascript
复制
SharedPreferences.Editor edit = (Editor) getSharedPreferences(Constants.APP_DEFAULT_PREF, MODE_PRIVATE).edit();
edit.remove(Constants.PREF_ACC);
edit.commit();

在这两种情况下,从Constants.PREF_ACC中获取SharedPreferences值将返回null

我想知道我该选哪一个。它们中是否有任何与内存相关的问题?他们的System.gc行为将是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-24 17:15:51

理论上,remove优于put(null),因为它移除键和值(一旦提交),而不是映射(并保持)到空值的键。

但从Android 5.1.1的实现来看,它们是等价的:

代码语言:javascript
复制
    ...
    String k = e.getKey();
    Object v = e.getValue();
    // "this" is the magic value for a removal mutation. In addition,
    // setting a value to "null" for a given key is specified to be
    // equivalent to calling remove on that key.
    if (v == this || v == null) {
        if (!mMap.containsKey(k)) {
            continue;
        }
        mMap.remove(k);
    } else {
    ...

这也是putXXX方法(putStringSet)文档中所指出的:

为该参数传递null等同于使用此键调用remove(String)。

票数 1
EN

Stack Overflow用户

发布于 2016-03-24 16:01:07

我建议使用删除

当我们不执行putString删除时,它只是在编辑器中标记为要执行,并且只有在调用提交和调用提交时才会执行--所有的删除调用都在put调用之前执行。因此,最好使用remove调用从编辑器中删除某些内容。

票数 0
EN

Stack Overflow用户

发布于 2016-03-24 16:19:19

文档的接口SharedPreferences.Editor来判断remove(String)

在编辑器中标记一个首选项值应该被删除,这将在调用commit()之后在实际的首选项中完成。 注意,当提交回首选项时,所有的删除都是首先完成的,无论是在此编辑器上调用put方法之前还是之后调用remove。

…对于putInt(int)

在preferences编辑器中设置一个int值,在调用commit()或apply()后将其写回。

…似乎只有一个显著的区别:remove(String) 调用将“首先执行,无论您是在put方法之前还是之后调用remove”

尽管如此,我真的很怀疑实际的执行顺序对一般用例没有多大影响,所以您只需选择其中一种方法就可以了。

p.s.__,我仍然在寻找SharedPreferences.Editor的具体类,它可能会提供更多关于这方面的线索。一旦我找到一个就会更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36201201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档