สำรองข้อมูลผู้ใช้ด้วยการสำรองข้อมูลอัตโนมัติ

การสำรองข้อมูลอัตโนมัติสำหรับแอปจะสำรองข้อมูลของผู้ใช้โดยอัตโนมัติจากแอปที่กำหนดเป้าหมายและทำงานบน 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) หรือต่ำกว่า

  1. ในไฟล์ AndroidManifest.xml ให้เพิ่มแอตทริบิวต์ android:fullBackupContent ลงในองค์ประกอบ <application> ดังที่แสดงในตัวอย่างต่อไปนี้ แอตทริบิวต์นี้ชี้ไปยังไฟล์ XML ที่มีกฎการสำรองข้อมูล

    <application ...
     android:fullBackupContent="@xml/backup_rules">
    </application>
  2. สร้างไฟล์ 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) ขึ้นไป

หากอัปเกรดอุปกรณ์สำหรับพัฒนาเป็น 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 ขึ้นไป

  1. ในไฟล์ AndroidManifest.xml ให้เพิ่มแอตทริบิวต์ android:dataExtractionRules ลงในองค์ประกอบ <application> ดังที่แสดงในตัวอย่างต่อไปนี้ แอตทริบิวต์นี้ชี้ไปยัง XML ที่มีกฎการสำรองข้อมูล

    <application ...
     android:dataExtractionRules="backup_rules.xml">
    </application>
  2. สร้างไฟล์ 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