Jawaban:
getDefaultSharedPreferences
akan menggunakan nama default seperti "com.example.something_preferences", tetapi getSharedPreferences
akan membutuhkan nama.
getDefaultSharedPreferences
sebenarnya penggunaan Context.getSharedPreferences
(di bawah ini langsung dari sumber Android):
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
tidak umum karena nama diperlukan untuk kerangka cadangan / pemulihan.
Mari kita tinjau poin dasar perbedaan:
getDefaultSharedPreferences()
menggunakan nama file preferensi standar. Default ini disetel per aplikasi, sehingga semua aktivitas dalam konteks aplikasi yang sama dapat mengaksesnya dengan mudah seperti dalam contoh berikut:
SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this);
if (spref.contains("email")) {
String sEmailAddr = spref.getString("email", "");
}
Preferensi biasanya disimpan di /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml
.
Metode alternatif - getSharedPreferences(name,mode)
mengharuskan untuk menunjukkan nama (file) preferensi tertentu dan mode operasi (misalnya pribadi, world_readable, dll.)
Seperti yang disebutkan oleh copolii, hasilnya sama, tetapi opsi pertama lebih sederhana dan tidak memiliki fleksibilitas untuk dipecah menjadi beberapa file preferensi, yang ditawarkan oleh opsi kedua getSharedPreferences()
. Berbagi preferensi antara aplikasi menggunakan MODE_WORLD_READABLE indikator operasi juga sesuatu yang mungkin digunakan getSharedPreferences()
, tetapi jarang digunakan.
IMHO, getDefaultSharedPreferences()
dapat digunakan dengan aman tanpa masuk ke dalam kebingungan beberapa nama file preferensi yang rentan terhadap kesalahan ketik dan kebingungan, kecuali jika Anda ingin modul yang berbeda di aplikasi Anda akan menggunakan file preferensi yang berbeda. Biasanya ini tidak diperlukan. Jika aplikasi perlu menyimpan banyak parameter, mungkin menggunakan basis data eksternal akan lebih baik karena menawarkan perlindungan data yang lebih baik.
Jika seseorang mengetahui alasan yang bagus untuk menggunakan getSharedPreferences () secara teratur dan tidak getDefaultSharedPreferences (), beri tahu saya dengan berkomentar di sini.
Saya tahu posting ini agak lama, tetapi karena 24.0.1 dari perpustakaan dukungan v7 Anda dapat mengambil preferensi default berdasarkan konteks di mana saja menggunakan
// context might be an application context, activity, ..
// so if you want to get your apps defaults, pass an activity context
PreferenceManager.getDefaultSharedPreferences(context)
Ada fungsi ke-3 juga:
public SharedPreferences Activity.getPreferences(int mode) {}
Lihat pertanyaan dan jawaban saya di sini: Bercak dengan preferensi bersama android - yang berfungsi untuk digunakan?
Baik getSharedPreferences () dan getDefaultSharedPreferences () digunakan untuk mengakses preferensi level aplikasi .getDefaultSharedPreferences () digunakan untuk mendapatkan preferensi bersama yang berfungsi sesuai dengan kerangka preferensi keseluruhan Android. getDefaultSharedPreferences () lebih baik digunakan karena memberikan objek SharedPreferences yang berfungsi dengan PreferenceActivity secara default.
Ketahuilah bahwa menggunakan preferensi bersama default TIDAK sama dengan menggunakan preferensi bersama dengan nama paket Anda:
context.getSharedPreferences(getPackageName(), MODE_PRIVATE);
=> Nama preferensi bersama: " com.my.packagename "
PreferenceManager.getDefaultSharedPreferences(context);
=> Nama preferensi bersama: " com.my.packagename_preferences "
Context
instance untuk memanggil salah satu dari keduanya.