ความแตกต่างระหว่างgetDefaultSharedPreferences
และgetSharedPreferences
ใน Android คืออะไร? ใครช่วยอธิบายหน่อยได้ไหม
ความแตกต่างระหว่างgetDefaultSharedPreferences
และgetSharedPreferences
ใน Android คืออะไร? ใครช่วยอธิบายหน่อยได้ไหม
คำตอบ:
getDefaultSharedPreferences
จะใช้ชื่อเริ่มต้นเช่น "com.example.something_preferences" แต่getSharedPreferences
จะต้องมีชื่อ
getDefaultSharedPreferences
ในความเป็นจริงใช้Context.getSharedPreferences
(ด้านล่างมาโดยตรงจากแหล่ง 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
ถูกต้องไม่เป็นสาธารณะเนื่องจากจำเป็นต้องใช้ชื่อสำหรับกรอบงานการสำรองข้อมูล / คืนค่า
ตรวจสอบจุดพื้นฐานของความแตกต่าง:
getDefaultSharedPreferences()
ใช้ชื่อไฟล์การตั้งค่าเริ่มต้น ค่าเริ่มต้นนี้กำหนดไว้สำหรับแต่ละแอปพลิเคชันดังนั้นกิจกรรมทั้งหมดในบริบทแอพเดียวกันสามารถเข้าถึงได้อย่างง่ายดายเช่นในตัวอย่างต่อไปนี้:
SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this);
if (spref.contains("email")) {
String sEmailAddr = spref.getString("email", "");
}
/data/data/com.package.name/shared_prefs/com.package.name_preferences.xml
การตั้งค่าจะถูกเก็บไว้ที่
วิธีการอื่น - getSharedPreferences(name,mode)
ต้องระบุชื่อการตั้งค่า (ไฟล์) และโหมดการทำงาน (เช่นส่วนตัว, world_readable, ฯลฯ )
ดังกล่าวโดย copolii ผลที่ได้คือเดียวกัน getSharedPreferences()
แต่ตัวเลือกแรกคือง่ายและขาดความยืดหยุ่นในการแยกไฟล์การตั้งค่าหลายที่นำเสนอโดยตัวเลือกที่สองของ การแชร์ค่ากำหนดระหว่างแอพโดยใช้ตัวบ่งชี้การทำงาน MODE_WORLD_READABLE นั้นเป็นสิ่งที่เป็นไปได้เช่นกันgetSharedPreferences()
งานได้ แต่ไม่ค่อยได้ใช้
IMHO, getDefaultSharedPreferences()
สามารถใช้งานได้อย่างปลอดภัยโดยไม่ต้องสับสนกับชื่อไฟล์หลาย ๆ ไฟล์ที่มีแนวโน้มที่จะพิมพ์ผิดและสับสนยกเว้นว่าคุณต้องการโมดูลที่แตกต่างในแอพของคุณจะใช้ไฟล์ปรับแต่งต่าง ๆ โดยปกติแล้วสิ่งนี้ไม่จำเป็น หากแอพต้องการบันทึกพารามิเตอร์จำนวนมากอาจใช้ฐานข้อมูลภายนอกจะดีกว่าเนื่องจากมีการปกป้องข้อมูลที่ดีกว่า
หากมีคนรู้ว่ามีเหตุผลที่ดีที่จะใช้ getSharedPreferences () เป็นประจำและไม่ใช่ getDefaultSharedPreferences () โปรดแจ้งให้เราทราบโดยแสดงความคิดเห็นที่นี่
ฉันรู้ว่าโพสต์นี้ค่อนข้างเก่า แต่เนื่องจาก 24.0.1 ของไลบรารีการสนับสนุน v7 คุณสามารถดึงการตั้งค่าเริ่มต้นตามบริบทได้ทุกที่โดยใช้
// context might be an application context, activity, ..
// so if you want to get your apps defaults, pass an activity context
PreferenceManager.getDefaultSharedPreferences(context)
มีฟังก์ชั่นที่ 3 เช่นกัน:
public SharedPreferences Activity.getPreferences(int mode) {}
ดูคำถามและคำตอบของฉันที่นี่: ยุ่งกับการตั้งค่าที่ใช้ร่วมกันของ android - ฟังก์ชั่นที่จะใช้?
ทั้ง getSharedPreferences () และ getDefaultSharedPreferences () ถูกใช้เพื่อเข้าถึงการกำหนดค่าตามความชอบระดับแอ็พพลิเคชัน. getDefaultSharedPreferences () ถูกใช้เพื่อรับการกำหนดค่าตามความชอบแบบแบ่งใช้ที่ทำงานตามกรอบการกำหนดค่าโดยรวมของ Android getDefaultSharedPreferences () ดีกว่าที่จะใช้เพราะให้วัตถุ SharedPreferences ที่ทำงานกับ PreferenceActivity ตามค่าเริ่มต้น
โปรดทราบว่าการใช้การกำหนดลักษณะที่แบ่งปันเป็นค่าเริ่มต้นนั้นไม่เหมือนกับการใช้การตั้งค่าแบบแบ่งใช้ที่มีชื่อแพ็คเกจของคุณ:
context.getSharedPreferences(getPackageName(), MODE_PRIVATE);
=> ชื่อการตั้งค่าที่แบ่งปัน: " com.my.packagename "
PreferenceManager.getDefaultSharedPreferences(context);
=> ชื่อการตั้งค่าที่แบ่งปัน: " com.my.packagename_preferences "
Context
อินสแตนซ์เพื่อโทรหาทั้งคู่