ฉันได้ใช้งานBackupAgentHelper
โดยใช้ข้อมูลที่ให้มาFileBackupHelper
เพื่อสำรองและกู้คืนฐานข้อมูลดั้งเดิมที่ฉันมี นี่คือฐานข้อมูลที่คุณมักจะใช้ร่วมกับContentProviders
และที่อยู่ใน/data/data/yourpackage/databases/
และที่อาศัยอยู่ใน
ใครจะคิดว่านี่เป็นกรณีทั่วไป แต่เอกสารยังไม่ชัดเจนว่าจะทำอย่างไร: http://developer.android.com/guide/topics/data/backup.html ไม่มีBackupHelper
เฉพาะสำหรับฐานข้อมูลทั่วไปเหล่านี้ ดังนั้นฉันจึงใช้FileBackupHelper
มันชี้ไปที่ไฟล์. db ของฉันใน " /databases/
" แนะนำการล็อกรอบ ๆ การดำเนินการ db ใด ๆ (เช่นdb.insert
) ในของฉันContentProviders
และลองสร้าง/databases/
ไดเร็กทอรี "" มาก่อนonRestore()
เนื่องจากไม่มีอยู่หลังจากติดตั้ง
ฉันได้ใช้โซลูชันที่คล้ายกันสำหรับSharedPreferences
ความสำเร็จในแอปอื่นในอดีต อย่างไรก็ตามเมื่อฉันทดสอบการใช้งานใหม่ของฉันในโปรแกรมจำลอง -2.2 ฉันเห็นว่ามีการสำรองข้อมูลLocalTransport
จากบันทึกรวมถึงการกู้คืนที่ดำเนินการอยู่ (และonRestore()
เรียก) กระนั้นก็ไม่เคยสร้างไฟล์ db ขึ้นมาเอง
โปรดทราบว่าทั้งหมดนี้เกิดขึ้นหลังจากการติดตั้งและก่อนการเปิดตัวแอปครั้งแรกหลังจากทำการกู้คืนแล้ว นอกเหนือจากที่กลยุทธ์การทดสอบของฉันอยู่บนพื้นฐานของhttp://developer.android.com/guide/topics/data/backup.html#Testing
โปรดทราบว่าฉันไม่ได้พูดถึงฐานข้อมูล sqlite ที่ฉันจัดการเองหรือสำรองข้อมูลไปยัง SDcard เซิร์ฟเวอร์ของตัวเองหรือที่อื่น
ฉันเห็นการกล่าวถึงในเอกสารเกี่ยวกับฐานข้อมูลที่แนะนำให้ใช้แบบกำหนดเองBackupAgent
แต่ดูเหมือนจะไม่เกี่ยวข้อง:
อย่างไรก็ตามคุณอาจต้องการขยาย BackupAgent โดยตรงหากคุณต้องการ: * สำรองข้อมูลในฐานข้อมูล หากคุณมีฐานข้อมูล SQLite ที่คุณต้องการกู้คืนเมื่อผู้ใช้ติดตั้งแอปพลิเคชันของคุณใหม่คุณต้องสร้าง BackupAgent แบบกำหนดเองที่อ่านข้อมูลที่เหมาะสมระหว่างการสำรองข้อมูลจากนั้นสร้างตารางของคุณและแทรกข้อมูลระหว่างการดำเนินการกู้คืน
กรุณาแจ้งความชัดเจน
ถ้าฉันจำเป็นต้องทำเองจนถึงระดับ SQL ฉันกังวลเกี่ยวกับหัวข้อต่อไปนี้:
เปิดฐานข้อมูลและธุรกรรม ฉันไม่รู้วิธีปิดจากคลาสซิงเกิลตันนอกเวิร์กโฟลว์ของแอป
วิธีแจ้งผู้ใช้ว่าการสำรองข้อมูลอยู่ระหว่างดำเนินการและฐานข้อมูลถูกล็อก อาจใช้เวลานานดังนั้นฉันอาจต้องแสดงแถบความคืบหน้า
วิธีการทำเช่นเดียวกันในการคืนค่า ตามที่ฉันเข้าใจการคืนค่าอาจเกิดขึ้นเมื่อผู้ใช้เริ่มใช้แอปแล้ว (และป้อนข้อมูลลงในฐานข้อมูล) ดังนั้นคุณจึงไม่สามารถสันนิษฐานได้ว่าจะกู้คืนข้อมูลที่สำรองไว้ในตำแหน่ง (การลบข้อมูลว่างหรือข้อมูลเก่า) คุณจะต้องเข้าร่วมอย่างใดอย่างหนึ่งซึ่งสำหรับฐานข้อมูลที่ไม่สำคัญใด ๆ นั้นเป็นไปไม่ได้เนื่องจากรหัส
วิธีรีเฟรชแอปหลังจากการกู้คืนเสร็จสิ้นโดยไม่ทำให้ผู้ใช้ติดขัดในบางจุด - ตอนนี้ - ไม่สามารถเข้าถึงได้
ฉันแน่ใจได้หรือไม่ว่าฐานข้อมูลได้รับการอัพเกรดในการสำรองข้อมูลหรือกู้คืนแล้ว? มิฉะนั้นสคีมาที่คาดไว้อาจไม่ตรงกัน