Yanıtlar:
getDefaultSharedPreferences
"com.example.something_preferences" gibi bir varsayılan adını kullanacak, ancak getSharedPreferences
olacak gerektiren bir isim.
getDefaultSharedPreferences
aslında kullanır Context.getSharedPreferences
(aşağıda doğrudan Android kaynağından):
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
getDefaultSharedPreferencesMode());
}
private static String getDefaultSharedPreferencesName(Context context) {
return context.getPackageName() + "_preferences";
}
private static int getDefaultSharedPreferencesMode() {
return Context.MODE_PRIVATE;
}
getDefaultSharedPreferencesName
Yedekleme / geri yükleme çerçevesi için ad gerektiğinden kötüye genel değildir.
Temel fark noktalarını gözden geçirelim:
getDefaultSharedPreferences()
varsayılan bir tercih dosyası adı kullanır. Bu varsayılan uygulama başına ayarlanır, böylece aynı uygulama bağlamındaki tüm etkinlikler aşağıdaki örnekteki gibi kolayca erişebilir:
SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this);
if (spref.contains("email")) {
String sEmailAddr = spref.getString("email", "");
}
Tercihler genellikle adresinde saklanır /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml
.
Alternatif yöntem - getSharedPreferences(name,mode)
belirli bir tercih (dosya) adı ve bir işlem modunun (ör. Özel, world_readable, vs.) belirtilmesini gerektirir.
Copolii tarafından belirtildiği gibi, sonuç aynıdır, ancak ilk seçenek daha basittir ve ikinci seçenek tarafından sunulan çoklu tercih dosyalarına bölünme esnekliğinden yoksundur getSharedPreferences()
. MODE_WORLD_READABLE çalışma göstergesi kullanarak uygulamalar arasında tercihleri paylaşmak da mümkün olan bir şeydir getSharedPreferences()
, ancak nadiren kullanılır.
IMHO, getDefaultSharedPreferences()
uygulamanızdaki farklı modüllerin farklı tercih dosyaları kullanmasını istemiyorsanız, yazım hatalarına ve karışıklığa eğilimli çoklu tercih dosya adlarının karışıklığına girmeden güvenle kullanılabilir. Normalde buna gerek yoktur. Bir uygulamanın çok fazla parametre kaydetmesi gerekiyorsa, muhtemelen daha iyi veri koruması sunduğu için harici veritabanı kullanmak daha iyi olacaktır.
Birisi getDefaultSharedPreferences () öğesini değil, getSharedPreferences () öğesini düzenli olarak kullanmak için iyi bir neden biliyorsa, lütfen buraya yorum yaparak bana bildirin.
Bu yazının biraz eski olduğunu biliyorum, ancak v7 destek kütüphanesinin 24.0.1'inden beri, herhangi bir yeri kullanarak içeriğe göre varsayılan tercihleri alabilirsiniz
// context might be an application context, activity, ..
// so if you want to get your apps defaults, pass an activity context
PreferenceManager.getDefaultSharedPreferences(context)
Bir de 3. fonksiyon var:
public SharedPreferences Activity.getPreferences(int mode) {}
Soruma ve cevabımı buraya bakın: Android'in paylaşılan tercihleriyle uğraşın - hangi işlevi kullanacaksınız?
Hem getSharedPreferences () hem de getDefaultSharedPreferences (), uygulama düzeyindeki tercihlere erişmek için kullanılır .getDefaultSharedPreferences (), Android'in genel tercih çerçevesine göre çalışan paylaşılan tercihleri almak için kullanılır. getDefaultSharedPreferences () yöntemi, varsayılan olarak PreferenceActivity ile çalışan SharedPreferences nesnesini verdiği için daha iyidir.
Varsayılan paylaşılan tercihleri kullanmanın, paket adınızla paylaşılan tercihleri kullanmakla aynı OLMADIĞINI unutmayın:
context.getSharedPreferences(getPackageName(), MODE_PRIVATE);
=> Paylaşılan tercihlerin adı: " com.my.packagename "
PreferenceManager.getDefaultSharedPreferences(context);
=> Paylaşılan tercihlerin adı: " com.my.packagename_preferences "
Context
ikisini de aramak için bir örneğe ihtiyacınız var .