Jaka jest różnica między getDefaultSharedPreferences
i getSharedPreferences
na Androidzie? Czy ktoś może wyjaśnić?
224
Jaka jest różnica między getDefaultSharedPreferences
i getSharedPreferences
na Androidzie? Czy ktoś może wyjaśnić?
Context
instancji, aby wywołać jedno z nich.Odpowiedzi:
getDefaultSharedPreferences
użyje domyślnej nazwy, takiej jak „com.example.something_preferences”, alegetSharedPreferences
będzie wymagała nazwy.getDefaultSharedPreferences
w rzeczywistości wykorzystujeContext.getSharedPreferences
(poniżej pochodzi bezpośrednio ze źródła Androida):źródło
getDefaultSharedPreferencesName
nie jest publiczna, ponieważ nazwa jest potrzebna do tworzenia kopii zapasowych / przywracania.Przyjrzyjmy się podstawowym różnicom:
getDefaultSharedPreferences()
używa domyślnej nazwy pliku preferencji. Ustawienie domyślne jest ustawione dla aplikacji, więc wszystkie działania w tym samym kontekście aplikacji mogą uzyskać do niego łatwy dostęp, jak w poniższym przykładzie:Preferencje są zwykle przechowywane w
/data/data/com.package.name/shared_prefs/com.package.name_preferences.xml
.Metoda alternatywna -
getSharedPreferences(name,mode)
wymaga wskazania konkretnej nazwy preferencji (pliku) i trybu działania (np. Prywatny, czytelny na świecie itp.)Jak wspomniano w copolii, wynik jest taki sam, ale pierwsza opcja jest prostsza i brakuje jej elastyczności dzielenia na wiele plików preferencji, która jest oferowana przez drugą opcję
getSharedPreferences()
. Udostępnianie preferencji między aplikacjami za pomocą wskaźnika działania MODE_WORLD_READABLE jest również możliwe przy użyciugetSharedPreferences()
, ale rzadko używane.IMHO,
getDefaultSharedPreferences()
można bezpiecznie używać bez wpadania w zamieszanie wielu nazw plików preferencji, które są podatne na literówki i zamieszanie, chyba że chcesz, aby różne moduły w Twojej aplikacji korzystały z różnych plików preferencji. Zwykle nie jest to konieczne. Jeśli aplikacja musi zapisać wiele parametrów, prawdopodobnie lepiej będzie korzystać z zewnętrznej bazy danych, ponieważ zapewnia ona lepszą ochronę danych.Jeśli ktoś zna dobry powód, aby regularnie korzystać z getSharedPreferences (), a nie getDefaultSharedPreferences (), daj mi znać, komentując tutaj.
źródło
Wiem, że ten post jest trochę stary, ale od 24.0.1 biblioteki wsparcia v7 możesz pobrać domyślne preferencje według kontekstu w dowolnym miejscu za pomocą
Zobacz https://developer.android.com/reference/android/support/v7/preference/PreferenceManager#getdefaultsharedpreferences
źródło
Jest też trzecia funkcja:
Zobacz moje pytanie i odpowiedź tutaj: Bałagan ze wspólnymi preferencjami Androida - jakiej funkcji użyć?
źródło
Zarówno getSharedPreferences (), jak i getDefaultSharedPreferences () są używane do uzyskiwania dostępu do preferencji na poziomie aplikacji .getDefaultSharedPreferences () służy do uzyskiwania wspólnych preferencji, które działają zgodnie z ogólnymi ramami preferencji Androida. Metoda getDefaultSharedPreferences () jest lepsza w użyciu, ponieważ udostępnia obiekt SharedPreferences, który domyślnie działa z PreferenceActivity.
źródło
Pamiętaj, że użycie domyślnych preferencji wspólnych NIE jest tym samym, co użycie preferencji wspólnych z nazwą pakietu:
=> Nazwa wspólnych preferencji: „ com.my.packagename ”
=> Nazwa wspólnych preferencji: „ com.my.packagename_preferences ”
źródło