Cadangan Saya Menghilangkan Semua Foto
Saya membuat tombol cadangan untuk pelacak suasana hati (mood tracker) offline.
Aplikasi ini mengekspor data ke file JSON. Pengguna dapat menyimpannya dan memindahkannya ke ponsel baru. Tampaknya sempurna.
Kemudian saya mengubah ID paket aplikasi. Saya mencoba instalasi baru di perangkat baru dan memulihkan cadangannya.
Entri teks muncul kembali. Namun, setiap foto hilang.
Saya menyadari kesalahan saya. Cadangan tersebut bukanlah cadangan yang sebenarnya. Itu hanyalah daftar penunjuk (pointers) ke file yang sudah tidak ada lagi.
Aplikasi menyimpan foto di disk. Database menyimpan jalur file (file path).
Jalurnya terlihat seperti ini:
file:///data/user/0/com.example.app/files/entry_media/image.jpg
Saat saya mengekspor JSON, saya hanya menyimpan jalur tersebut. Di perangkat yang sama, proses impor berhasil karena file-filenya masih ada.
Di perangkat baru, jalur-jalur tersebut tidak mengarah ke mana pun. Pengguna melihat thumbnail yang rusak dan mengira aplikasi telah menghapus kenangan mereka.
Jika ekspor Anda hanya membawa jalur file, Anda tidak memiliki cadangan yang portabel. Anda memiliki cadangan yang hanya berfungsi pada mesin yang sebenarnya tidak membutuhkannya.
Cadangan yang sebenarnya harus berisi data yang sesungguhnya.
Saya mengubah prosesnya. Sekarang, ekspor membaca setiap foto dan mengubahnya menjadi string Base64 di dalam JSON.
Pendekatan ini memiliki konsekuensi (trade-offs): • Ukuran file bertambah sekitar 33 persen. • Library besar memerlukan lebih banyak memori selama proses ekspor.
Saya memilih keakuratan daripada ukuran file. Cadangan yang besar itu berguna. Cadangan kecil yang kehilangan semua gambar tidak ada gunanya.
Saya juga mengubah cara saya menangani impor untuk memastikan kecepatan dan keamanan:
- Tulis semua foto ke disk perangkat baru terlebih dahulu. Ini dilakukan di luar transaksi database agar tetap cepat.
- Jalankan satu transaksi database untuk menghubungkan jalur lokal yang baru ke entri-entri tersebut.
Saya juga membangun sistem agar fail soft (gagal secara halus). Jika satu foto hilang atau tidak dapat dibaca, aplikasi akan melompatinya dan lanjut ke foto berikutnya. Satu gambar yang rusak tidak boleh merusak seluruh proses pemulihan.
Pelajaran yang dipetik:
- Uji dengan cara yang benar. Ekspor di satu perangkat, hapus datanya, lalu impor pada instalasi bersih. Melakukan impor ulang pada perangkat yang sama dapat menyembunyikan bug.
- Bawa byte-nya. Jika data harus bertahan saat pergantian perangkat, pindahkan data yang sesungguhnya, bukan alamatnya.
Sumber: https://dev.to/diven_rastdus_c5af27d68f3/my-offline-apps-backup-lost-every-photo-on-a-new-phone-3d36
