Backup / restauração do Android: como fazer backup de um banco de dados intern

Implementei umBackupAgentHelper usando o @ forneciFileBackupHelper para fazer backup e restaurar o banco de dados nativo que tenho. Esse é o banco de dados que você normalmente usa junto comContentProviders e que reside em/data/data/yourpackage/databases/.

@One pensaria que este é um caso comum. No entanto, os documentos não são claros sobre o que fazer:http: //developer.android.com/guide/topics/data/backup.htm. Não háBackupHelper especificamente para esses bancos de dados típicos. Por isso, usei oFileBackupHelper, apontou para o meu arquivo .db em "/databases/ ", introduziu bloqueios em qualquer operação de banco de dados (comodb.insert) no meuContentProviders e até tentou criar o "/databases/ "antes deonRestore() porque ele não existe após a instalaçã

Implementei uma solução semelhante para oSharedPreferences com sucesso em um aplicativo diferente no passado. No entanto, ao testar minha nova implementação no emulador-2.2, vejo um backup sendo executado paraLocalTransport dos logs, bem como uma restauração sendo executada (eonRestore() chamado).o entanto, o próprio arquivo db nunca é criad

Observe que isso ocorre após uma instalação e antes do primeiro lançamento do aplicativo, após a restauração ter sido realizada. Além disso, minha estratégia de teste foi baseada emhttp: //developer.android.com/guide/topics/data/backup.html#Testin.

Observe também que não estou falando de algum banco de dados sqlite que eu mesmo gerencio, nem de fazer backup em um cartão SD, servidor próprio ou outro loca

Eu vi uma menção nos documentos sobre bancos de dados aconselhando o uso de umBackupAgent mas não parece relacionado:

No entanto, convém estender o BackupAgent diretamente se você precisar: * Fazer backup de dados em um banco de dados. Se você tiver um banco de dados SQLite que deseja restaurar quando o usuário reinstalar seu aplicativo, precisará criar um BackupAgent personalizado que leia os dados apropriados durante uma operação de backup, crie sua tabela e insira os dados durante uma operação de restauração.

Alguma clareza, por favor.

Se eu realmente precisar fazer isso até o nível SQL, estou preocupado com os seguintes tópicos:

Abra bancos de dados e transações. Não faço idéia de como fechá-los de uma classe singleton fora do fluxo de trabalho do meu aplicativ

Como notificar o usuário de que um backup está em andamento e o banco de dados está bloqueado. Pode levar muito tempo, por isso talvez seja necessário mostrar uma barra de progress

Como fazer o mesmo na restauração. Pelo que entendi, a restauração pode ocorrer exatamente quando o usuário já começou a usar o aplicativo (e a inserir dados no banco de dados). Portanto, você não pode presumir apenas restaurar os dados armazenados em backup no local (excluindo os dados vazios ou antigos). Você precisará, de alguma forma, ingressar nele, o que para qualquer banco de dados não trivial é impossível devido aos ID

Como atualizar o aplicativo após a restauração, sem deixar o usuário preso em algum ponto - agora inacessível.

Posso ter certeza de que o banco de dados já foi atualizado no backup ou na restauração? Caso contrário, o esquema esperado pode não corresponde

questionAnswers(6)

yourAnswerToTheQuestion