Mój backup stracił wszystkie zdjęcia

Zbudowałem przycisk kopii zapasowej dla offline'owego trackera nastroju.

Eksportował dane do pliku JSON. Użytkownicy mogli go zapisać i przenieść na nowy telefon. Wydawało się, że wszystko jest idealnie.

Potem zmieniłem ID pakietu aplikacji. Spróbowałem świeżej instalacji na nowym urządzeniu i przywróciłem kopię zapasową.

Wpisy tekstowe wróciły. Wszystkie zdjęcia zniknęły.

Zrozumiałem swój błąd. To nie był prawdziwy backup. To była tylko lista wskaźników do plików, które już nie istniały.

Aplikacja przechowywała zdjęcia na dysku. Baza danych zawierała ścieżkę do pliku.

Ścieżka wyglądała tak: file:///data/user/0/com.example.app/files/entry_media/image.jpg

Kiedy eksportowałem JSON, zapisywałem tylko tę ścieżkę. Na tym samym urządzeniu import działa, ponieważ pliki wciąż tam są.

Na nowym urządzeniu te ścieżki prowadzą donikąd. Użytkownik widzi uszkodzone miniatury i myśli, że aplikacja usunęła jego wspomnienia.

Jeśli Twój eksport zawiera tylko ścieżki do plików, nie masz przenośnego backupu. Masz backup, który działa tylko na maszynie, która nie potrzebuje kopii zapasowej.

Prawdziwy backup musi zawierać właściwe dane.

Zmieniłem proces. Teraz eksport odczytuje każde zdjęcie i konwertuje je do ciągu Base64 wewnątrz pliku JSON.

To podejście ma swoje wady i zalety: • Rozmiar pliku wzrasta o około 33 procent. • Duże biblioteki wymagają więcej pamięci podczas eksportu.

Wybrałem poprawność zamiast rozmiaru pliku. Duży backup jest użyteczny. Malutki backup, który traci wszystkie obrazy, jest bezwartościowy.

Zmieniłem również sposób obsługi importu, aby zapewnić szybkość i bezpieczeństwo:

  1. Najpierw zapisz wszystkie zdjęcia na dysku nowego urządzenia. Dzieje się to poza transakcją bazy danych, aby zachować szybkość.
  2. Uruchom pojedynczą transakcję bazy danych, aby powiązać nowe lokalne ścieżki z wpisami.

Zbudowałem też system tak, aby działał w trybie "fail soft". Jeśli jedno zdjęcie brakuje lub jest nieczytelne, aplikacja pomija je i przechodzi do następnego. Jeden uszkodzony obraz nie powinien uniemożliwić całego procesu przywracania.

Wyciągnięte lekcje:

  • Testuj we właściwy sposób. Wyeksportuj dane na jednym urządzeniu, wyczyść je i zaimportuj na świeżej instalacji. Ponowny import na tym samym urządzeniu maskuje błędy.
  • Przenoś bajty. Jeśli dane mają przetrwać zmianę urządzenia, przenieś właściwe dane, a nie tylko adres.

Źródło: https://dev.to/diven_rastdus_c5af27d68f3/my-offline-apps-backup-lost-every-photo-on-a-new-phone-3d36