2016-03-24 24 views
3

Android numaralı telefondan SharedPreferences hakkında biraz şüphe duyuyorum. null dönecektir SharedPreferences den Constants.PREF_ACC değeri getirilirken, iki durumda daSharedPreferences - Android

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

:

Birincisi:

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

İkinci

esas olarak iki seçenek var, bir tercih silin.

Hangisini tercih etmeliyim merak ediyordum. Bunlardan herhangi bir bellek ile ilgili sorunlar var mı? System.gc davranışı onlarla birlikte ne olacak?

+0

Paylaşılan değer eklemeden önce getiriliyor musunuz? –

+0

Varsayım, tercih değerine ayarlıyım, eriştiniz ve sonra onu kaldırmaya çalışıyorum çünkü artık geçerli değil. Gerekirse tekrar erişmeye çalışacağız. – cprakashagr

+0

sonra her iki seçenek de iyi –

cevap

1

Teorik remove, put(null) daha iyidir.

Ama Android 5.1.1 implementation bakılırsa, bunlar eşdeğerdir: Bu argüman null Geçme

eşdeğerdir: putXXX yöntemden birini (putStringSet) belgelerine ne diyor da

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

çağırarak bu dize (String) .

0

remove'u kullanmanızı tavsiye ederim. Biz putString veya remove hiçbir şey yapılır

, sadece YAPILMASI GEREKEN ve commit denir Ve taahhüt çağrıldığında bütün kaldırma çağrıları koymak çağrılmadan önce yürütülen yalnızca bitmiş olur olarak Editor işaretlenmiştir. Bu yüzden Editör'den bir şeyleri kaldırmak için çağrıları kaldırmak daha iyidir.

0

remove(String) için arayüz SharedPreferences.Editor arasında docs bakılırsa:

Mark () adlı bir kez tamamlama gerçek tercihlerinde yapılacaktır bir tercih değeri kaldırılması gerektiğini düzenleyicisinde.

Tercihlere geri çekilirken, bu düzenleme için yöntemini kullanmadan önce veya sonra kaldırmanızın gerekip gerekmediğine bakılmaksızın tüm kaldırma işlemlerinin önce olduğunu unutmayın.

... ve putInt(int) için:

kez denir() işlemek() veya uygulamak geri tercihleri ​​editörü bir int değeri yazılacak ayarlayın. remove(String) aramalar "ne olursa olsun önce veya satım yöntemlerine sonra remove denilen bakılmaksızın, ilk yapılması" olacaktır:

... tek çarpıcı fark var gibi görünüyor.

Gerçekte, yürütme emrinin ortalama kullanım durumları için çok fazla bir önemi olmayacağından kuşkuluyum. Bu nedenle, bu yöntemlerden birini seçebilir ve tamamen iyi olabilirsiniz.

p.s., Ben hala bu konuda daha fazla ipucu sağlayabilir somut sınıfı SharedPreferences.Editor arıyorum. Bir tane bulduktan sonra güncellenir. o anahtar ve yerine haritalama (ve alıkoyma) değerini (bir kez taahhüt) boş değere anahtarı hem kaldırır çünkü

İlgili konular