การสำรองข้อมูลอัตโนมัติสำหรับแอปจะสำรองข้อมูลของผู้ใช้โดยอัตโนมัติจากแอปที่กำหนดเป้าหมายและทำงานบน Android 6.0 (API ระดับ 23) ขึ้นไป Android จะเก็บข้อมูลแอปไว้โดยอัปโหลดไปยัง Google ไดรฟ์ของผู้ใช้ ซึ่งข้อมูลดังกล่าวจะได้รับการปกป้องด้วยข้อมูลเข้าสู่ระบบบัญชี Google ของผู้ใช้ ข้อมูลสำรองเข้ารหัสจากต้นทางถึงปลายทางในอุปกรณ์ ที่ใช้ Android 9 ขึ้นไปโดยใช้ PIN, รูปแบบ หรือรหัสผ่านของอุปกรณ์ ทุกแอปสามารถจัดสรรข้อมูลสำรองได้ถึง 25 MB ต่อผู้ใช้แอป โดยไม่มีค่าใช้จ่ายในการจัดเก็บข้อมูลสำรอง แอปสามารถปรับแต่งกระบวนการสำรองข้อมูลหรือเลือกไม่ใช้ได้โดยปิดใช้การสำรองข้อมูล
สำหรับภาพรวมของตัวเลือกการสำรองข้อมูลของ Android และคำแนะนำเกี่ยวกับข้อมูลที่ควร สำรองและกู้คืนข้อมูล โปรดดูภาพรวมของการสำรองข้อมูล
ไฟล์ที่สำรองข้อมูลไว้
โดยค่าเริ่มต้น การสำรองข้อมูลอัตโนมัติจะรวมไฟล์ในไดเรกทอรีส่วนใหญ่ที่ระบบกำหนดให้กับแอปของคุณ ดังนี้
ไฟล์ค่ากำหนดที่แชร์
ไฟล์ที่บันทึกไว้ในที่จัดเก็บข้อมูลภายในของแอปและเข้าถึงโดย
getFilesDir()
หรือgetDir(String, int)
ไฟล์ในไดเรกทอรีที่
getDatabasePath(String)
แสดงผล ซึ่ง รวมไฟล์ที่สร้างด้วยคลาสSQLiteOpenHelper
ด้วยไฟล์ในที่จัดเก็บข้อมูลภายนอกในไดเรกทอรีที่แสดงผลโดย
getExternalFilesDir(String)
การสำรองข้อมูลอัตโนมัติจะยกเว้นไฟล์ในไดเรกทอรีที่แสดงผลโดย getCacheDir()
getCodeCacheDir()
และ getNoBackupFilesDir()
ไฟล์ที่บันทึกไว้ใน
สถานที่เหล่านี้ต้องการเพียงชั่วคราว และจงใจยกเว้นจาก
การสำรองข้อมูล
คุณสามารถกำหนดค่าแอปให้รวมและยกเว้นไฟล์บางรายการได้ สำหรับข้อมูลเพิ่มเติม โปรดดูที่ส่วนรวมและยกเว้นไฟล์
ตำแหน่งของข้อมูลสำรอง
ระบบจะจัดเก็บข้อมูลสำรองไว้ในโฟลเดอร์ส่วนตัวในบัญชี Google ไดรฟ์ของผู้ใช้ โดยจำกัดไว้ที่ 25 MB ต่อแอป ข้อมูลที่บันทึกไว้จะไม่นับรวมในโควต้า Google ไดรฟ์ส่วนบุคคลของผู้ใช้ โดยระบบจะจัดเก็บเฉพาะข้อมูลสำรองล่าสุดเท่านั้น เมื่อ มีการสำรองข้อมูลไว้ ข้อมูลสำรองก่อนหน้านี้จะถูกลบ ไม่สามารถอ่านข้อมูลสำรอง ผู้ใช้หรือแอปอื่นๆ ในอุปกรณ์
ผู้ใช้สามารถดูรายการแอปที่สำรองข้อมูลไว้ใน Google ไดรฟ์ได้ แอปสำหรับ Android สำหรับอุปกรณ์ที่ใช้ระบบ Android ผู้ใช้สามารถค้นหารายการนี้ได้ในไดรฟ์ ลิ้นชักการนำทางของแอปในการตั้งค่า > สำรองข้อมูลและรีเซ็ต
ระบบจะจัดเก็บข้อมูลสำรองจากช่วงอายุการตั้งค่าอุปกรณ์แต่ละช่วงไว้ในชุดข้อมูลแยกต่างหาก ดังที่อธิบายไว้ในตัวอย่างต่อไปนี้
หากผู้ใช้มีอุปกรณ์ 2 เครื่อง ชุดข้อมูลสํารองข้อมูลจะมีอยู่สําหรับอุปกรณ์แต่ละเครื่อง
หากผู้ใช้รีเซ็ตอุปกรณ์เป็นค่าเริ่มต้นแล้วตั้งค่าอุปกรณ์ด้วย บัญชีเดียวกัน ข้อมูลสำรองได้รับการจัดเก็บไว้ในชุดข้อมูลใหม่ ระบบจะลบชุดข้อมูลที่ล้าสมัยโดยอัตโนมัติหลังจากไม่มีการใช้งานในระยะเวลาหนึ่ง
กำหนดการสำรองข้อมูล
ระบบจะสำรองข้อมูลโดยอัตโนมัติเมื่อเป็นไปตามเงื่อนไขทั้งหมดต่อไปนี้
- ผู้ใช้ได้เปิดใช้การสำรองข้อมูลในอุปกรณ์ ใน Android 9 การตั้งค่านี้จะอยู่ในการตั้งค่า > ระบบ > การสำรองข้อมูล
- เมื่อเวลาผ่านไปอย่างน้อย 24 ชั่วโมงนับตั้งแต่การสำรองข้อมูลครั้งล่าสุด
- อุปกรณ์ไม่มีการใช้งาน
- อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi (หากผู้ใช้อุปกรณ์ไม่ได้เลือกการสำรองข้อมูลผ่านอินเทอร์เน็ตมือถือ)
ในทางปฏิบัติ ภาวะเหล่านี้จะเกิดขึ้นประมาณทุกคืน แต่อุปกรณ์อาจ ไม่ต้องสำรองข้อมูล (เช่น หากอุปกรณ์ไม่เชื่อมต่อกับเครือข่าย) ระบบจะอัปโหลดเฉพาะในกรณีที่ข้อมูลแอปมีการเปลี่ยนแปลงเท่านั้น เพื่อประหยัดแบนด์วิดท์เครือข่าย
ในระหว่างการสำรองข้อมูลอัตโนมัติ ระบบจะปิดแอปเพื่อไม่ให้แอปอีก
เขียนลงในระบบไฟล์ โดยค่าเริ่มต้น ระบบการสำรองข้อมูลจะไม่สนใจแอปที่ทำงานอยู่เบื้องหน้าเพื่อไม่ให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดี คุณสามารถลบล้างลักษณะการทำงานเริ่มต้นได้โดยตั้งค่าแอตทริบิวต์ android:backupInForeground
เป็น "จริง"
เพื่อให้การทดสอบง่ายขึ้น Android มีเครื่องมือที่ช่วยให้คุณเริ่มต้น สำรองของแอป โปรดดูข้อมูลเพิ่มเติมที่หัวข้อทดสอบการสำรองและกู้คืนข้อมูล
กำหนดเวลากู้คืน
ระบบจะกู้คืนข้อมูลเมื่อใดก็ตามที่มีการติดตั้งแอป ไม่ว่าจะจาก Play Store
ในระหว่างการตั้งค่าอุปกรณ์ (เมื่อระบบติดตั้งแอปที่ติดตั้งไว้ก่อนหน้านี้) หรือโดย
กำลังติดตั้ง adb
การดำเนินการกู้คืนจะเกิดขึ้นหลังจากที่ติดตั้ง APK แล้ว
แต่ก่อนที่แอปจะพร้อมให้บริการโดยผู้ใช้
ในระหว่างวิซาร์ดการตั้งค่าอุปกรณ์เริ่มต้น ระบบจะแสดงรายการที่พร้อมใช้งานต่อผู้ใช้ ชุดข้อมูลสำรองไว้ และถูกถามว่าจะกู้คืนข้อมูลจากชุดข้อมูลใด การสำรองข้อมูลทุกประเภท ชุดข้อมูลที่ถูกเลือกจะกลายเป็นชุดข้อมูลระดับบนสำหรับอุปกรณ์ อุปกรณ์จะกู้คืนได้จากข้อมูลสำรองของตัวเองหรือชุดข้อมูลเดิม หากมีการสำรองข้อมูลจาก ที่มีให้ใช้งานทั้ง 2 แหล่ง อุปกรณ์จะจัดลำดับความสำคัญในการสำรองข้อมูลของตัวเอง หากผู้ใช้ ไม่ทำตามวิซาร์ดการตั้งค่าอุปกรณ์ อุปกรณ์จะสามารถคืนค่าจาก ข้อมูลสำรองของตัวเอง
Android มีเครื่องมือที่ช่วยให้คุณเริ่มกู้คืนแอปด้วยตนเองได้ เพื่อลดความซับซ้อนในการทดสอบ ดูข้อมูลเพิ่มเติมได้ที่ทดสอบการสำรองและกู้คืน
เปิดและปิดใช้การสำรองข้อมูล
แอปที่กำหนดเป้าหมายเป็น Android 6.0 (API ระดับ 23) ขึ้นไปจะเข้าร่วมการสำรองข้อมูลอัตโนมัติโดยอัตโนมัติ ในไฟล์ Manifest ของแอป ให้ตั้งค่าบูลีน android:allowBackup
เพื่อเปิดหรือปิดใช้การสำรองข้อมูล ค่าเริ่มต้นคือ
true
แต่เราขอแนะนำให้คุณตั้งค่าแอตทริบิวต์ในไฟล์ Manifest อย่างชัดเจน
ที่แสดงในตัวอย่างต่อไปนี้
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
คุณสามารถปิดการสำรองข้อมูลได้โดยตั้งค่า android:allowBackup
เป็น false
คุณอาจ
ต้องการทำเช่นนี้หากแอปของคุณสามารถสร้างสถานะใหม่ผ่านกลไกอื่นๆ ได้
หรือหากแอปของคุณจัดการกับข้อมูลที่ละเอียดอ่อน
รวมและยกเว้นไฟล์
ระบบจะสำรองข้อมูลแอปเกือบทั้งหมดโดยค่าเริ่มต้น สำหรับข้อมูลเพิ่มเติม โปรดดู ส่วนเกี่ยวกับไฟล์ที่สำรองข้อมูลไว้
ส่วนนี้จะแสดงวิธีกำหนดกฎ XML ที่กําหนดเองเพื่อควบคุมสิ่งที่จะสํารองข้อมูล หากแอปกำหนดเป้าหมายเป็น Android 12 (API ระดับ 31) ขึ้นไป คุณต้องระบุกฎการสำรองข้อมูล XML ชุดเพิ่มเติมตามที่อธิบายไว้ในส่วนนี้เพื่อรองรับการเปลี่ยนแปลงการกู้คืนข้อมูลสำรองที่เปิดตัวสำหรับอุปกรณ์ที่ใช้ Android เวอร์ชันเหล่านี้
ควบคุมการสำรองข้อมูลใน Android 11 และต่ำกว่า
ทำตามขั้นตอนในส่วนนี้เพื่อควบคุมไฟล์ที่จะสำรองข้อมูลในอุปกรณ์ที่ใช้ Android 11 (API ระดับ 30) หรือต่ำกว่า
ในไฟล์
AndroidManifest.xml
ให้เพิ่มแอตทริบิวต์android:fullBackupContent
ลงในองค์ประกอบ<application>
ดังที่แสดงในตัวอย่างต่อไปนี้ แอตทริบิวต์นี้ชี้ไปยังไฟล์ XML ที่มีกฎการสำรองข้อมูล<application ... android:fullBackupContent="@xml/backup_rules"> </application>
สร้างไฟล์ XML ชื่อ
@xml/backup_rules
ใน ไดเรกทอรีres/xml/
ในไฟล์นี้ ให้เพิ่มกฎด้วยฟังก์ชัน<include>
และ<exclude>
องค์ประกอบ ตัวอย่างต่อไปนี้สำรองข้อมูลค่ากำหนดที่มีร่วมกันทั้งหมด ยกเว้นdevice.xml
:<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/> </full-backup-content>
กำหนดเงื่อนไขของอุปกรณ์ที่จําเป็นสําหรับการสํารองข้อมูล
หากแอปบันทึกข้อมูลที่ละเอียดอ่อนไว้ในอุปกรณ์ คุณระบุได้ เงื่อนไขที่ข้อมูลแอปของคุณจะรวมอยู่ในข้อมูลสำรองของผู้ใช้ คุณสามารถ เพิ่มเงื่อนไขต่อไปนี้ใน Android 9 (API ระดับ 28) ขึ้นไป
clientSideEncryption
: ข้อมูลสำรองของผู้ใช้ได้รับการเข้ารหัสด้วยฝั่งไคลเอ็นต์ ข้อมูลลับ การเข้ารหัสรูปแบบนี้จะเปิดใช้ในอุปกรณ์ที่ใช้ Android 9 ขึ้นไป ตราบใดที่ผู้ใช้เปิดใช้การสำรองข้อมูลใน Android 9 ขึ้นไปและตั้งค่าการล็อกหน้าจอ (PIN, รูปแบบ หรือรหัสผ่าน) สำหรับอุปกรณ์deviceToDeviceTransfer
: ผู้ใช้กำลังโอนข้อมูลสำรองไปยังอีกไฟล์หนึ่ง อุปกรณ์ที่รองรับการโอนระหว่างอุปกรณ์ไปยังอุปกรณ์ (เช่น Google Pixel)
หากอัปเกรดอุปกรณ์สำหรับพัฒนาเป็น Android 9 แล้ว คุณต้องปิดใช้แล้วเปิดการสำรองข้อมูลอีกครั้งหลังจากอัปเกรด เนื่องจาก Android เท่านั้น เข้ารหัสข้อมูลสำรองด้วยข้อมูลลับฝั่งไคลเอ็นต์หลังจากแจ้งให้ผู้ใช้ทราบในการตั้งค่า หรือ วิซาร์ดการตั้งค่า
หากต้องการประกาศเงื่อนไขการรวม ให้ตั้งค่าแอตทริบิวต์ requireFlags
เป็น
ค่าที่เลือกในองค์ประกอบ <include>
ภายในชุดข้อมูลสำรอง
กฎ:
backup_rules.xml
<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <!-- App data isn't included in user's backup unless client-side encryption is enabled. --> <include domain="file" path="." requireFlags="clientSideEncryption" /> </full-backup-content>
หากแอปใช้ระบบการสำรองข้อมูลคีย์-ค่า หรือหากคุณใช้
BackupAgent
ด้วยตนเอง คุณยังสามารถใช้ข้อกำหนดแบบมีเงื่อนไขเหล่านี้ได้ด้วย
ลงในตรรกะการสำรองข้อมูลโดยทำการเปรียบเทียบบิตระหว่าง
ชุด Flag การส่งของออบเจ็กต์ BackupDataOutput
และข้อมูลสำรองที่กำหนดเอง
FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED
หรือ
FLAG_DEVICE_TO_DEVICE_TRANSFER
แฟล็ก
ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างการใช้เมธอดนี้
Kotlin
class CustomBackupAgent : BackupAgent() { override fun onBackup(oldState: ParcelFileDescriptor?, data: BackupDataOutput?, newState: ParcelFileDescriptor?) { if (data != null) { if ((data.transportFlags and FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.transportFlags and FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } } // Implementation of onRestore() here. }
Java
public class CustomBackupAgent extends BackupAgent { @Override public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException { if ((data.getTransportFlags() & FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.getTransportFlags() & FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } // Implementation of onRestore() here. }
ควบคุมการสำรองข้อมูลใน Android 12 ขึ้นไป
หากแอปกำหนดเป้าหมายเป็น Android 12 (API ระดับ 31) ขึ้นไป ให้ทำตามขั้นตอนใน ส่วนนี้เพื่อควบคุมไฟล์ที่จะสำรองในอุปกรณ์ที่ทำงานอยู่ Android 12 ขึ้นไป
ในไฟล์
AndroidManifest.xml
ให้เพิ่มแอตทริบิวต์android:dataExtractionRules
ลงในองค์ประกอบ<application>
ดังที่แสดงในตัวอย่างต่อไปนี้ แอตทริบิวต์นี้ชี้ไปยัง XML ที่มีกฎการสำรองข้อมูล<application ... android:dataExtractionRules="backup_rules.xml"> </application>
สร้างไฟล์ XML ชื่อ
backup_rules.xml
ในไดเรกทอรีres/xml/
ในไฟล์นี้ ให้เพิ่มกฎด้วยฟังก์ชัน<include>
และ<exclude>
องค์ประกอบ ตัวอย่างต่อไปนี้จะสำรองข้อมูลค่ากำหนดที่แชร์ทั้งหมดยกเว้นdevice.xml
<?xml version="1.0" encoding="utf-8"?> <data-extraction-rules> <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/> </cloud-backup> </data-extraction-rules>
ไวยากรณ์การกำหนดค่า XML
ไวยากรณ์ XML สำหรับไฟล์การกำหนดค่าจะแตกต่างกันไปขึ้นอยู่กับเวอร์ชันของ Android ที่แอปของคุณกำหนดเป้าหมายและทำงานอยู่
Android 11 หรือต่ำกว่า
ใช้ไวยากรณ์ XML ต่อไปนี้สำหรับไฟล์การกําหนดค่าที่ควบคุมการสำรองข้อมูลสำหรับอุปกรณ์ที่ใช้ Android 11 หรือต่ำกว่า
<full-backup-content> <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string" requireFlags=["clientSideEncryption" | "deviceToDeviceTransfer"] /> <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string" /> </full-backup-content>
Android 12 ขึ้นไป
หากแอปกำหนดเป้าหมายเป็น Android 12 (API ระดับ 31) ขึ้นไป ให้ใช้รูปแบบ XML ต่อไปนี้สำหรับไฟล์การกําหนดค่าที่ควบคุมการสำรองข้อมูลสำหรับอุปกรณ์ที่ใช้ Android 12 ขึ้นไป
<data-extraction-rules> <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]> ... <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... </cloud-backup> <device-transfer> ... <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... </device-transfer> </data-extraction-rules>
ส่วนต่างๆ ของการกําหนดค่า (<cloud-backup>
, <device-transfer>
) จะมีกฎที่ใช้กับการโอนประเภทนั้นๆ เท่านั้น การแยกนี้ช่วยให้คุณยกเว้นไฟล์หรือไดเรกทอรีจากข้อมูลสำรองของ Google ไดรฟ์ได้ขณะที่ยังคงโอนระหว่างอุปกรณ์ (D2D) ซึ่งจะมีประโยชน์ในกรณีที่คุณมีไฟล์ขนาดใหญ่เกินกว่าที่จะสำรองข้อมูลไปยังระบบคลาวด์ได้ แต่สามารถโอนระหว่างอุปกรณ์ได้โดยไม่มีปัญหา
หากไม่มีกฎสําหรับโหมดการสํารองข้อมูลบางโหมด เช่น หากไม่มีส่วน <device-transfer>
ระบบจะเปิดใช้โหมดนั้นสําหรับเนื้อหาทั้งหมดยกเว้นไดเรกทอรี no-backup
และ cache
ตามที่อธิบายไว้ในส่วนไฟล์ที่สำรองข้อมูล
แอปสามารถตั้งค่า Flag disableIfNoEncryptionCapabilities
ในส่วน <cloud-backup>
เพื่อให้แน่ใจว่าระบบจะสำรองข้อมูลเฉพาะในกรณีที่สามารถเข้ารหัสได้ เช่น เมื่อผู้ใช้มีหน้าจอล็อก การตั้งค่าข้อจำกัดนี้
หยุดการส่งข้อมูลสำรองไปยังระบบคลาวด์หากอุปกรณ์ของผู้ใช้ไม่รองรับ
การเข้ารหัส แต่เนื่องจากไม่ได้ส่งการโอนแบบ D2D ไปยังเซิร์ฟเวอร์ การดำเนินการดังกล่าวจึงดำเนินต่อไป
เพื่อทำงานบนอุปกรณ์ที่ไม่รองรับการเข้ารหัสได้
ไวยากรณ์สำหรับการรวมและยกเว้นองค์ประกอบ
คุณกำหนดองค์ประกอบ <include>
และ <exclude>
ได้ในแท็ก <full-backup-content>
, <cloud-backup>
และ <device-transfer>
(ขึ้นอยู่กับเวอร์ชัน Android ของอุปกรณ์และtargetSDKVersion
ของแอป) ดังนี้
<include>
ระบุไฟล์หรือโฟลเดอร์ที่จะสำรองข้อมูล โดยค่าเริ่มต้น การสำรองข้อมูลอัตโนมัติจะรวมไฟล์แอปเกือบทั้งหมด หากคุณระบุองค์ประกอบ
<include>
ระบบจะไม่รวมไฟล์ใดๆ โดยค่าเริ่มต้นอีกต่อไปและจะสำรองข้อมูลเฉพาะไฟล์ที่ระบุ หากต้องการรวมไฟล์หลายรายการ ให้ใช้องค์ประกอบ<include>
หลายรายการใน Android 11 และต่ำกว่า องค์ประกอบนี้ยังมี
requireFlags
ซึ่งส่วนที่อธิบายวิธีระบุ ข้อกำหนดแบบมีเงื่อนไขสำหรับการสำรองข้อมูลจะกล่าวถึงรายละเอียดเพิ่มเติมระบบจะยกเว้นไฟล์ในไดเรกทอรีที่
getCacheDir()
,getCodeCacheDir()
หรือgetNoBackupFilesDir()
แสดงผลเสมอ แม้ว่าคุณจะพยายามรวมไฟล์เหล่านั้นไว้ก็ตาม<exclude>
ระบุไฟล์หรือโฟลเดอร์ที่จะยกเว้นในระหว่างการสำรองข้อมูล นี่คือบางส่วน ไฟล์ที่โดยปกติแล้วจะไม่รวมอยู่ในข้อมูลสำรอง ได้แก่
ไฟล์ที่มีตัวระบุเฉพาะอุปกรณ์ ซึ่งออกโดยเซิร์ฟเวอร์หรือสร้างขึ้นในอุปกรณ์ เช่น Firebase Cloud Messaging (FCM) ต้องสร้างโทเค็นการลงทะเบียนทุกครั้งที่ผู้ใช้ ติดตั้งแอปในอุปกรณ์เครื่องใหม่ หากมีการกู้คืนโทเค็นการลงทะเบียนเดิม แอปอาจทำงานผิดปกติ
ไฟล์ที่เกี่ยวข้องกับการแก้ไขข้อบกพร่องของแอป
ไฟล์ขนาดใหญ่ที่ทำให้แอปใช้โควต้าการสำรองข้อมูลเกิน 25 MB
เอลิเมนต์ <include>
และ <exclude>
แต่ละรายการต้องมีแอตทริบิวต์ 2 รายการต่อไปนี้
domain
ระบุตำแหน่งของทรัพยากร ค่าที่ถูกต้องสำหรับแอตทริบิวต์นี้ ได้แก่
root
: ไดเรกทอรีในระบบไฟล์ซึ่งไฟล์ส่วนตัวทั้งหมด ที่เป็นของแอปนี้จะได้รับการจัดเก็บไว้file
: ไดเรกทอรีที่getFilesDir()
แสดงdatabase
: ไดเรกทอรีที่getDatabasePath()
แสดง ฐานข้อมูล สร้างด้วยSQLiteOpenHelper
จะจัดเก็บไว้ที่นี่sharedpref
: ไดเรกทอรีที่เก็บSharedPreferences
external
: ไดเรกทอรีที่getExternalFilesDir()
แสดงผลdevice_root
: เหมือนกับroot
แต่สำหรับพื้นที่เก็บข้อมูลที่อุปกรณ์ปกป้องdevice_file
: เหมือนกับfile
แต่สำหรับพื้นที่เก็บข้อมูลที่อุปกรณ์ปกป้องdevice_database
: เหมือนกับdatabase
แต่สำหรับพื้นที่เก็บข้อมูลที่อุปกรณ์ปกป้องdevice_sharedpref
: เหมือนกับsharedpref
แต่สำหรับพื้นที่เก็บข้อมูลที่อุปกรณ์ปกป้อง
path
ระบุไฟล์หรือโฟลเดอร์ที่จะรวมหรือยกเว้นจากการสํารองข้อมูล หมายเหตุ ดังต่อไปนี้
- แอตทริบิวต์นี้ไม่รองรับไวลด์การ์ดหรือไวยากรณ์นิพจน์ทั่วไป
- คุณอ้างอิงไดเรกทอรีปัจจุบันโดยใช้
./
ได้ แต่ใช้ไม่ได้ อ้างอิงไดเรกทอรีหลัก เช่น การใช้..
เพื่อความปลอดภัย เหตุผล - หากคุณระบุไดเรกทอรี กฎจะมีผลกับไฟล์ทั้งหมดในไดเรกทอรีและไดเรกทอรีย่อยแบบซ้ำ
ใช้ BackupAgent
แอปที่ใช้การสำรองข้อมูลอัตโนมัติไม่จำเป็นต้องใช้ BackupAgent
แต่จะเลือกใช้ BackupAgent
ที่กําหนดเองก็ได้ ปกติแล้วจะมี
มี 2 เหตุผลที่ควรทำเช่นนี้ ได้แก่
คุณต้องการรับการแจ้งเตือนเกี่ยวกับเหตุการณ์การสำรองข้อมูล เช่น
onRestoreFinished()
และonQuotaExceeded(long, long)
ระบบจะดำเนินการเรียกกลับเหล่านี้แม้ว่าแอปจะไม่ทำงานก็ตามคุณแสดงชุดไฟล์ที่ต้องการสำรองข้อมูลด้วย XML ได้ยาก กฎ ในบางกรณีที่พบไม่บ่อยนัก คุณสามารถใช้
BackupAgent
ที่ลบล้างonFullBackup(FullBackupDataOutput)
เพื่อจัดเก็บสิ่งที่ต้องการ หากต้องการเก็บไว้ใช้กับการใช้งานเริ่มต้นของระบบ ให้เรียกใช้เมธอดที่เกี่ยวข้องในซุปเปอร์คลาสด้วยsuper.onFullBackup()
หากคุณใช้ BackupAgent
โดยค่าเริ่มต้น ระบบจะคาดหวังให้แอปของคุณ
ดำเนินการสำรองและกู้คืนข้อมูลคีย์-ค่า วิธีใช้การสำรองข้อมูลอัตโนมัติตามไฟล์
ให้ตั้งค่าแอตทริบิวต์ android:fullBackupOnly
เป็น true
ใน
ไฟล์ Manifest ของแอป
ในระหว่างการสำรองข้อมูลและกู้คืนข้อมูลอัตโนมัติ ระบบจะเปิดแอปใน
เพื่อป้องกันไม่ให้แอปเข้าถึงไฟล์ที่อาจทำให้
ขัดแย้งกันและปล่อยให้แอปเรียกใช้เมธอด Callback ใน BackupAgent
ในโหมดที่จํากัดนี้ ระบบจะไม่เปิดใช้งานกิจกรรมหลักของแอปโดยอัตโนมัติ ผู้ให้บริการเนื้อหาจะไม่ได้รับการเริ่มต้น และระบบจะสร้างอินสแตนซ์ของคลาสพื้นฐาน Application
แทนการสร้างอินสแตนซ์ของคลาสย่อยที่ประกาศไว้ในไฟล์ Manifest ของแอป
BackupAgent
ต้องใช้เมธอด Abstract onBackup()
และ
onRestore()
ซึ่งใช้สำหรับการสำรองข้อมูลคีย์-ค่า หากไม่ต้องการสำรองข้อมูลคีย์-ค่า คุณสามารถเว้นค่าของเมธอดเหล่านั้นไว้ได้
โปรดดูข้อมูลเพิ่มเติมที่ Extend BackupAgent