Meu Backup Perdeu Todas as Fotos
Eu construí um botão de backup para um rastreador de humor offline.
Ele exportava os dados para um arquivo JSON. Os usuários podiam salvá-lo e movê-lo para um novo telefone. Parecia perfeito.
Então, eu mudei o ID do pacote do aplicativo. Tentei uma instalação limpa em um novo dispositivo e restaurei o backup.
As entradas de texto voltaram. Todas as fotos haviam sumido.
Percebi meu erro. O backup não era um backup real. Era apenas uma lista de ponteiros para arquivos que não existiam mais.
O aplicativo armazenava as fotos no disco. O banco de dados guardava o caminho do arquivo.
O caminho era assim:
file:///data/user/0/com.example.app/files/entry_media/image.jpg
Quando eu exportava o JSON, eu salvava apenas esse caminho. No mesmo dispositivo, a importação funciona porque os arquivos ainda estão lá.
Em um novo dispositivo, esses caminhos não apontam para nada. O usuário vê miniaturas quebradas e pensa que o aplicativo deletou suas memórias.
Se a sua exportação carrega apenas caminhos de arquivos, você não tem um backup portátil. Você tem um backup que só funciona na máquina que não precisa de um.
Um backup real deve conter os dados propriamente ditos.
Eu mudei o processo. Agora, a exportação lê cada foto e a converte em uma string Base64 dentro do JSON.
Essa abordagem tem prós e contras: • O tamanho do arquivo aumenta cerca de 33 por cento. • Bibliotecas grandes exigem mais memória durante a exportação.
Escolhi a correção em vez do tamanho do arquivo. Um backup grande é útil. Um backup minúsculo que perde todas as imagens não serve para nada.
Também mudei a forma como lido com as importações para garantir velocidade e segurança:
- Escreva todas as fotos no disco do novo dispositivo primeiro. Isso acontece fora da transação do banco de dados para manter a rapidez.
- Execute uma única transação de banco de dados para vincular os novos caminhos locais às entradas.
Também construí o sistema para falhar de forma suave. Se uma foto estiver faltando ou for ilegível, o aplicativo a pula e passa para a próxima. Uma imagem corrompida não deve travar uma restauração inteira.
Lições aprendidas:
- Teste da maneira correta. Exporte em um dispositivo, limpe-o e importe em uma instalação limpa. Reimportar no mesmo dispositivo esconde bugs.
- Leve os bytes. Se os dados precisam sobreviver a uma mudança de dispositivo, mova os dados reais, não o endereço.
Fonte: https://dev.to/diven_rastdus_c5af27d68f3/my-offline-apps-backup-lost-every-photo-on-a-new-phone-3d36
