2016-03-24 19 views
3

SharedPreferencesについては少し疑問があります。Androidです。 nullを返しますSharedPreferencesからConstants.PREF_ACC値をフェッチし、いずれの場合もSharedPreferences - Android

SharedPreferences.Editor edit = (Editor) getSharedPreferences(Constants.APP_DEFAULT_PREF, MODE_PRIVATE).edit(); 
edit.remove(Constants.PREF_ACC); 
edit.commit(); 

まず:

SharedPreferences.Editor edit = (Editor) getSharedPreferences(Constants.APP_DEFAULT_PREF, MODE_PRIVATE).edit(); 
edit.putString(Constants.PREF_ACC, null); 
edit.commit(); 

セカンド

は、私たちは主に2つのオプションがあり、プリファレンスを削除します。

私はどちらを好むべきか疑問に思っていました。いずれかのメモリ関連の問題はありますか? System.gcの動作はどうなりますか?

+0

sharedPrefに値を追加する前にフェッチしていますか? –

+0

プリファレンス値を設定してアクセスし、それを削除しようとしたと仮定します。これはもはや有効ではないためです。必要に応じて再度アクセスします。 – cprakashagr

+0

両方のオプションが良好です –

答えて

1

理論removeは、put(null)よりも優れています。

しかしAndroid 5.1.1 implementationによって判断すると、彼らは同じです。この引数にnullを渡す

は同等です:putXXXのいずれかの方法は、(putStringSet)のドキュメントが言うこともある

... 
    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 { 
    ... 

このキーでremove(String) を呼び出します。

0

removeをお勧めします。我々putStringまたはremove何が行われている

は、それだけで行われるとcommitが と呼ばれ、コミットが呼び出されたときに、すべての削除コールはプット・コールの前に実行された場合にのみ行われますようEditorにマークされています。したがって、エディタから何かを削除するには、remove呼び出しを使用する方がよいでしょう。

remove(String)
0

ためのインターフェースSharedPreferences.Editordocsから判断する: 実際の設定で行われる嗜好値が削除されるべきであることをエディタに

マークは、一度(コミット)が呼び出されます。

環境設定に戻すときは、 のメソッドをこのエディタに配置する前に削除を呼び出したかどうかにかかわらず、すべての削除が最初に完了したことを確認してください。

...とputInt(int)のために:

(コミット)または(適用 一度戻って書き込まれるように、好みのエディタでint型の値を設定し

が)と呼ばれています。

...唯一の印象的な差があるように思える:remove(String)通話「にかかわらず、あなたはPUTメソッドの前または後に削除と呼ばれるかどうかに、最初に行われる」ことになります。

実際の実行順序は、平均的なユースケースにはあまり関係しないので、これらの方法のいずれかを選択して完全にうまくいくと思います。

p.s.、私はまだSharedPreferences.Editorの具体的なクラスを探していますが、これについてもっと手がかりを与えるかもしれません。見つけたらすぐに更新されます。それは代わりに、マッピング(及び保持)のキーと値(一度コミット)ヌル値にキーの両方を除去するため