Saya telah menerapkan BackupAgentHelper
menggunakan yang disediakan FileBackupHelper
untuk membuat cadangan dan memulihkan database asli yang saya miliki. Ini adalah database yang biasanya Anda gunakan bersama ContentProviders
dan yang berada di dalamnya /data/data/yourpackage/databases/
.
Orang akan mengira ini adalah kasus yang umum. Namun dokumen tersebut tidak menjelaskan apa yang harus dilakukan: http://developer.android.com/guide/topics/data/backup.html . Tidak ada BackupHelper
database khusus untuk tipikal ini. Oleh karena itu saya menggunakanFileBackupHelper
, mengarahkannya ke file .db saya di " /databases/
", memperkenalkan kunci di sekitar operasi db (seperti db.insert
) di my ContentProviders
, dan bahkan mencoba membuat /databases/
direktori " " sebelumnya onRestore()
karena tidak ada setelah instalasi.
Saya telah menerapkan solusi serupa untuk SharedPreferences
berhasil di aplikasi yang berbeda di masa lalu. Namun ketika saya menguji implementasi baru saya di emulator-2.2, saya melihat backup sedang dilakukan ke LocalTransport
dari log, serta pemulihan sedang dilakukan (dan onRestore()
dipanggil). Namun, file db itu sendiri tidak pernah dibuat.
Perhatikan bahwa ini semua setelah penginstalan, dan sebelum peluncuran pertama aplikasi, setelah pemulihan dilakukan. Selain itu, strategi pengujian saya didasarkan pada http://developer.android.com/guide/topics/data/backup.html#Testing .
Harap perhatikan juga bahwa saya tidak berbicara tentang beberapa database sqlite yang saya kelola sendiri, atau tentang mencadangkan ke SDcard, server sendiri, atau di tempat lain.
Saya memang melihat penyebutan di dokumen tentang database yang menyarankan untuk menggunakan kustom BackupAgent
tetapi tampaknya tidak terkait:
Namun, Anda mungkin ingin memperluas BackupAgent secara langsung jika Anda perlu: * Mencadangkan data dalam database. Jika Anda memiliki database SQLite yang ingin Anda pulihkan saat pengguna menginstal ulang aplikasi Anda, Anda perlu membuat BackupAgent kustom yang membaca data yang sesuai selama operasi pencadangan, kemudian membuat tabel dan memasukkan data tersebut selama operasi pemulihan.
Mohon kejelasannya.
Jika saya benar-benar perlu melakukannya sendiri hingga level SQL, maka saya khawatir tentang topik berikut:
Buka database dan transaksi. Saya tidak tahu cara menutupnya dari kelas tunggal di luar alur kerja aplikasi saya.
Cara memberi tahu pengguna bahwa cadangan sedang berlangsung dan database terkunci. Mungkin butuh waktu lama, jadi saya mungkin perlu menampilkan bilah kemajuan.
Cara melakukan hal yang sama pada pemulihan. Seperti yang saya pahami, pemulihan mungkin terjadi tepat ketika pengguna sudah mulai menggunakan aplikasi (dan memasukkan data ke dalam database). Jadi Anda tidak bisa berasumsi untuk hanya mengembalikan data yang dicadangkan di tempatnya (menghapus data kosong atau lama). Anda harus entah bagaimana bergabung dengannya, yang tidak mungkin untuk database non-sepele karena id.
Cara menyegarkan aplikasi setelah pemulihan selesai tanpa membuat pengguna terjebak di beberapa titik - yang sekarang - tidak dapat dijangkau.
Dapatkah saya memastikan bahwa database telah diupgrade saat melakukan backup atau restore? Jika tidak, skema yang diharapkan mungkin tidak cocok.