[英]SharedPreferences - Android
我对Android
的SharedPreferences
有一点怀疑。
要删除首选项,我们主要有两个选项:
第一:
SharedPreferences.Editor edit = (Editor) getSharedPreferences(Constants.APP_DEFAULT_PREF, MODE_PRIVATE).edit();
edit.putString(Constants.PREF_ACC, null);
edit.commit();
第二:
SharedPreferences.Editor edit = (Editor) getSharedPreferences(Constants.APP_DEFAULT_PREF, MODE_PRIVATE).edit();
edit.remove(Constants.PREF_ACC);
edit.commit();
在任何一种情况下,从SharedPreferences
获取Constants.PREF_ACC
值都将返回null
。
我想知道我应该选择哪一个。 其中任何一个都有任何与内存相关的问题吗? System.gc
行为与他们有什么关系?
理论上remove
比put(null)
更好,因为它删除了键和值(一旦提交),而不是将键映射(并保持)为空值。
但从Android 5.1.1实现来看,它们是等价的:
...
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)。
通过用于remove(String)
的接口SharedPreferences.Editor
的docs来判断:
在编辑器中标记应该删除首选项值,这将在调用commit()后在实际首选项中完成。
请注意,在提交回首选项时,无论是否在此编辑器上调用put方法之前或之后调用remove,都会先执行所有删除操作。
...和putInt(int)
:
在首选项编辑器中设置一个int值,一旦调用commit()或apply()就会被写回。
...似乎只有一个显着的区别: remove(String)
调用将“首先完成,无论你是否在put方法之前或之后调用remove” 。
也就是说,我真的怀疑实际的执行顺序对平均用例并不重要,所以你可以选择其中一种方法并完全没问题。
ps ,我仍然在寻找具体的SharedPreferences.Editor
类,它可能提供更多关于此的线索。 我会在找到一个后立即更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.