Shared Preferences to niezbędna funkcja w tworzeniu aplikacji mobilnych, która pozwala deweloperom przechowywać i pobierać niewielkie ilości danych w postaci par klucz-wartość. Mechanizm ten jest szczególnie przydatny do przechowywania ustawień użytkownika, stanów aplikacji lub innych danych konfiguracyjnych, które muszą zostać zachowane między sesjami aplikacji. Shared Preferences jest częścią platformy Android i oferuje prosty i wydajny sposób obsługi trwałych danych bez potrzeby złożonej konfiguracji bazy danych.
Gdy aplikacja używa Shared Preferences, dane są przechowywane w pliku XML w pamięci wewnętrznej aplikacji. Pozwala to aplikacji szybko uzyskiwać dostęp do danych i je aktualizować, co poprawia doświadczenie użytkownika, ponieważ jego preferencje i ustawienia pozostają dostępne i aktualne. Shared Preferences został zaprojektowany jako lekki i prywatny dla aplikacji, ale nie jest szyfrowany, co czyni go idealnym wyborem dla niewrażliwych danych w aplikacjach zoptymalizowanych pod kątem zarówno wydajności, jak i użyteczności.
Shared Preferences to prosty i wydajny sposób przechowywania niewielkich ilości danych w postaci par klucz-wartość w lokalnej pamięci urządzenia, który pozwala aplikacjom mobilnym zachowywać ustawienia użytkownika i stany aplikacji między sesjami. Ta funkcjonalność jest idealna do przechowywania preferencji użytkownika, takich jak ustawienia motywu lub informacja, czy użytkownik jest zalogowany, ponieważ oferuje lekkie rozwiązanie bez potrzeby bazy danych. Dane pozostają dostępne dla aplikacji nawet po jej zamknięciu lub ponownym uruchomieniu, co zapewnia spójne i spersonalizowane doświadczenie użytkownika. Shared Preferences jest szczególnie przydatny tam, gdzie potrzebny jest szybki dostęp do trwałych danych, a wymagania bezpieczeństwa są umiarkowane, ponieważ dane domyślnie nie są szyfrowane; nie należy w nim przechowywać haseł i innych sekretów w postaci niezaszyfrowanej.
More about Shared Preferences
Shared Preferences to niezbędna technologia w tworzeniu aplikacji mobilnych, która umożliwia proste i wydajne przechowywanie niewielkich ilości danych w postaci par klucz-wartość. Metoda ta jest idealna do przechowywania ustawień użytkownika, preferencji aplikacji i innych trwałych danych, które muszą zostać zachowane między sesjami aplikacji. Shared Preferences szczególnie dobrze sprawdza się w przypadkach, w których kluczowe znaczenie mają szybki dostęp do danych i łatwość użycia, takich jak ustawienia użytkownika, status logowania i konfiguracja aplikacji.
Od strony technicznej Shared Preferences przechowuje dane w pliku XML znajdującym się w pamięci wewnętrznej aplikacji. Gdy aplikacja chce zapisać lub pobrać dane, komunikuje się z tym plikiem za pomocą API obsługującego operacje odczytu i zapisu. Dzięki temu Shared Preferences jest zarówno wydajny, jak i łatwy we wdrożeniu, co jest dużą zaletą dla deweloperów, którzy chcą lekkiego zarządzania danymi bez konieczności obsługi złożonych operacji bazodanowych.
Shared Preferences można używać w różnych scenariuszach, z których każdy wspiera inny typ obsługi danych:
Przechowywanie ustawień użytkownika: Shared Preferences służy do przechowywania ustawień zdefiniowanych przez użytkownika, takich jak motyw, preferencje powiadomień lub wybór języka. Zapewnia to zachowanie preferencji użytkownika nawet po zamknięciu i ponownym otwarciu aplikacji.
Zarządzanie sesją: Shared Preferences może służyć do przechowywania danych związanych z sesją, takich jak status logowania lub identyfikator użytkownika, co pozwala aplikacji zapamiętać użytkownika między sesjami bez ponownego logowania. Tokeny dostępu i inne sekrety należy zaszyfrować przed zapisaniem.
Dane konfiguracyjne: Aplikacje mogą przechowywać dane konfiguracyjne potrzebne do działania aplikacji, takie jak ustawienia funkcji lub wartości domyślne, co ułatwia dostosowanie zachowania aplikacji bez zmiany kodu. Tajne klucze API nie należą do Shared Preferences, ponieważ wszystko, co jest przechowywane na urządzeniu, można wydobyć.
Jedną z największych zalet Shared Preferences jest prostota i wydajność. Łatwy dostęp do danych za pomocą par klucz-wartość pozwala deweloperom szybko wdrożyć trwałe przechowywanie danych bez martwienia się o złożone operacje bazodanowe. Dane są też dostępne tylko dla konkretnej aplikacji, co zapewnia pewien stopień bezpieczeństwa i prywatności.
Niskie zużycie zasobów przez Shared Preferences to kolejna ważna zaleta. Technologia ta wymaga minimalnej ilości miejsca i mocy obliczeniowej, co czyni ją idealną dla urządzeń mobilnych, na których optymalizacja zasobów ma krytyczne znaczenie. Ponieważ dane są przechowywane w pamięci wewnętrznej aplikacji, są też zwykle chronione przed dostępem innych aplikacji.
W praktyce Shared Preferences od dawna jest standardowym sposobem przechowywania prostych danych użytkownika w aplikacjach na Androida. Jest używany do utrzymywania spójnego i spersonalizowanego doświadczenia użytkownika przez zapamiętywanie jego preferencji i statusu. Służy też do optymalizacji wydajności aplikacji przez ograniczenie potrzeby powtarzanych żądań danych i wywołań sieciowych.
Podsumowując, Shared Preferences to technologia, która łączy prostotę i wydajność w rozwiązaniu, które sprawia, że przechowywanie danych jest bardziej intuicyjne i dostępne dla deweloperów. Zdolność do działania bez złożonej konfiguracji i przy minimalnym zużyciu zasobów czyni ją ważnym narzędziem w nowoczesnym tworzeniu aplikacji, w którym szybka i niezawodna obsługa danych jest niezbędna.
Frequently asked questions about Shared Preferences
Czym jest Shared Preferences i jak działa w programowaniu na Androida?
Shared Preferences w programowaniu na Androida to mechanizm przechowywania prostych danych w postaci par klucz-wartość, do których można uzyskać dostęp z różnych komponentów aplikacji. Metoda ta jest idealna do przechowywania niewielkich ilości danych, takich jak ustawienia użytkownika lub konfiguracja aplikacji, które nie wymagają bazy danych.
Gdy aplikacja używa Shared Preferences, tworzony jest plik zawierający zapisane dane, a plik ten jest dostępny tylko dla aplikacji, która go utworzyła. Dane są przechowywane w pliku XML w pamięci wewnętrznej aplikacji, co chroni je przed dostępem innych aplikacji na zwykłym urządzeniu bez roota. Deweloperzy mogą łatwo odczytywać ten plik i zapisywać w nim dane za pomocą metod takich jak getSharedPreferences(), edit(), putString() oraz commit() lub apply() do zapisania zmian.
W porównaniu z bardziej złożonymi rozwiązaniami do przechowywania danych, takimi jak bazy danych SQLite, Shared Preferences jest znacznie prostszy i szybszy we wdrożeniu, zwłaszcza gdy trzeba przechowywać tylko proste dane, które nie wymagają uporządkowanego przechowywania ani złożonych zapytań. Czyni to Shared Preferences wydajnym wyborem dla wielu aplikacji, które muszą szybko i łatwo przechowywać i pobierać niewielkie ilości danych.
Jak zapisuje się i pobiera dane za pomocą Shared Preferences?
Dane są przechowywane w Shared Preferences jako pary klucz-wartość. Najpierw uzyskuje się obiekt SharedPreferences, zwykle za pomocą getSharedPreferences i nazwy pliku. Aby zapisać dane, otwiera się edytor za pomocą edit(), dodaje wartości metodami takimi jak putString lub putBoolean i zapisuje zmiany za pomocą apply(), które zapisuje asynchronicznie, lub commit(), które zapisuje natychmiast.
Dane pobiera się metodami takimi jak getString lub getInt, podając klucz i wartość domyślną, która jest używana, jeśli klucz nie istnieje. W nowszych projektach na Androida Google często zaleca DataStore jako nowocześniejszy zamiennik, ale zasada kluczy i wartości jest taka sama.
Jakie typy danych można przechowywać w Shared Preferences?
Shared Preferences obsługuje proste typy danych: ciągi tekstowe (String), liczby całkowite (int), długie liczby całkowite (long), liczby dziesiętne (float) i wartości prawda/fałsz (boolean). Można też przechowywać zbiór ciągów tekstowych (Set of String).
Bardziej złożonych obiektów nie można przechowywać bezpośrednio. Można je przekonwertować na tekst, na przykład jako JSON, ale jest to zalecane tylko dla niewielkich ilości danych. Shared Preferences jest przeznaczony do lekkich informacji, takich jak ustawienia użytkownika, wybrany motyw lub to, czy wprowadzenie zostało już pokazane. Większe lub ustrukturyzowane dane należą do bazy danych, takiej jak Room, lub do plików.
Jaka jest różnica między Shared Preferences a innymi metodami przechowywania danych, takimi jak SQLite?
Shared Preferences przechowuje niewielkie ilości danych jako pary klucz-wartość w pliku na urządzeniu. Jest prosty w użyciu, ale nie nadaje się do dużych lub złożonych ilości danych, a prawdziwe zapytania nie są możliwe.
SQLite, często za pośrednictwem Room, to relacyjna baza danych, która może obsługiwać duże ilości ustrukturyzowanych danych, relacje między tabelami i zaawansowane wyszukiwanie. Pliki dobrze nadają się do obrazów, dokumentów i innych większych danych. DataStore to nowsza alternatywa Google dla Shared Preferences z asynchronicznym dostępem. Wybór zależy od ilości danych: ustawienia w Shared Preferences lub DataStore, ustrukturyzowane dane w bazie danych.
Jak zabezpiecza się dane przechowywane w Shared Preferences?
Dane w Shared Preferences są przechowywane jako zwykły tekst w prywatnym folderze aplikacji. Inne aplikacje zwykle nie mają do nich dostępu, ale na urządzeniu z rootem lub za pośrednictwem niektórych kopii zapasowych plik można odczytać. Haseł, tokenów i innych wrażliwych informacji nie należy więc przechowywać w postaci niezaszyfrowanej.
Wrażliwe dane można zaszyfrować przed zapisaniem, używając kluczy przechowywanych w Android Keystore, który został zaprojektowany do ochrony kluczy kryptograficznych. Biblioteka Jetpack androidx.security:security-crypto oferowała wcześniej do tego celu EncryptedSharedPreferences, ale Google oznaczył całą bibliotekę, w tym EncryptedSharedPreferences, EncryptedFile i MasterKey, jako przestarzałą od wersji 1.1.0-alpha07 w kwietniu 2025 roku. Zalecenie Google to zamiast tego używać zwykłych API platformy, takich jak SharedPreferences, razem z bezpośrednim użyciem Android Keystore, w którym klucz jest generowany za pomocą KeyGenerator i używany do szyfrowania wartości przed ich zapisaniem. Ogólnie na urządzeniu należy przechowywać jak najmniej wrażliwych informacji.
O jakich ograniczeniach należy pamiętać przy używaniu Shared Preferences?
Shared Preferences jest przeznaczony do niewielkich ilości prostych danych. Duże ilości danych mogą spowolnić aplikację, ponieważ cały plik jest ładowany do pamięci, a zapis za pomocą commit() w wątku głównym może powodować przycinanie interfejsu użytkownika.
Nie ma wbudowanej obsługi złożonych obiektów, relacji ani zapytań, a dane nie są automatycznie szyfrowane. Nie ma też bezpieczeństwa typów, więc błędny klucz lub typ danych wychodzi na jaw dopiero podczas działania aplikacji. Zmiany wprowadzane jednocześnie z kilku procesów nie są obsługiwane niezawodnie. W przypadku bardziej zaawansowanych potrzeb zalecane są DataStore, Room lub szyfrowane przechowywanie.
Shared Preferences for dummies
Shared Preferences to sprytna funkcja w aplikacjach mobilnych, która pozwala aplikacji zapamiętywać drobne informacje, które otrzymała. Można to sobie wyobrazić jako mały notes, w którym aplikacja może zapisywać rzeczy, które musi zapamiętać na później. Na przykład aplikacja, która pamięta nazwę użytkownika, aby nie trzeba było jej wpisywać przy każdym otwarciu aplikacji, używa Shared Preferences do przechowywania tej informacji. To łatwy i szybki sposób przechowywania przez aplikacje danych, które nie zajmują dużo miejsca i muszą być dostępne przy następnym użyciu aplikacji.