الاحتفاظ بنسخة احتياطية من بيانات المستخدمين باستخدام الاحتفاظ التلقائي بنسخة احتياطية

تُنشئ ميزة الاحتفاظ بنسخة احتياطية تلقائية للتطبيقات نسخة احتياطية تلقائيًا من بيانات المستخدم من التطبيقات التي تستهدف نظام التشغيل Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو إصدارًا أحدث وتشغّلها. يحافظ نظام التشغيل Android على بيانات التطبيقات من خلال تحميلها إلى Google Drive الخاص بالمستخدم، حيث يتم حمايتها باستخدام بيانات اعتماد حساب المستخدم على Google. تخضع النسخة الاحتياطية للتشفير التام بين الأطراف على الأجهزة. تشغيل الإصدار 9 من نظام Android أو الإصدارات الأحدث باستخدام رقم التعريف الشخصي أو النقش أو كلمة المرور للجهاز يمكن لكل تطبيق تخصيص ما يصل إلى 25 ميغابايت من البيانات الاحتياطية لكل مستخدم للتطبيق. لا يتم تحصيل أي رسوم مقابل تخزين البيانات الاحتياطية. يمكن لتطبيقك تخصيص عملية الاحتفاظ بنسخة احتياطية أو إيقافها من خلال إيقاف ميزة "الاحتفاظ بنسخة احتياطية".

للحصول على نظرة عامة حول خيارات الاحتفاظ بنسخة احتياطية في Android وإرشادات حول نوع البيانات التي يجب الاحتفاظ بها الاحتفاظ بنسخة احتياطية واستعادتها، يمكنك الاطّلاع على نظرة عامة على الاحتفاظ بنسخة احتياطية من البيانات.

الملفات التي يتم الاحتفاظ بنسخة احتياطية منها

بشكل افتراضي، تتضمن ميزة التحميل التلقائي الملفات في معظم الأدلة التي الذي يحدده النظام لتطبيقك:

  • ملفات الإعدادات المفضّلة المشتركة

  • الملفات المحفوظة في وحدة التخزين الداخلية لتطبيقك والتي يمكن الوصول إليها باستخدام رمز getFilesDir() أو getDir(String, int)

  • الملفات في الدليل التي تعرضها أداة getDatabasePath(String)، تتضمّن أيضًا الملفات التي تم إنشاؤها باستخدام الفئة SQLiteOpenHelper.

  • الملفات الموجودة على وحدة التخزين الخارجية في الدليل التي تم إرجاعها بواسطة getExternalFilesDir(String)

تستبعد ميزة "الاحتفاظ التلقائي بنسخة احتياطية" الملفات في الأدلة التي تعرضها getCacheDir() getCodeCacheDir() وgetNoBackupFilesDir(). لا تكون الملفات المحفوظة في هذه المواقع مطلوبة إلا مؤقتًا ويتم استبعادها عن عمد من عمليات الاحتفاظ بنسخة احتياطية.

يمكنك ضبط تطبيقك لتضمين ملفات معيّنة واستبعادها. لمزيد من المعلومات، اطّلِع على قسم تضمين الملفات واستبعادها.

الموقع الجغرافي للنسخة الاحتياطية

يتم تخزين البيانات الاحتياطية في مجلد خاص في حساب المستخدم على Google Drive، ويقتصر حجمها على 25 ميغابايت لكل تطبيق. ولا يتم احتساب البيانات المحفوظة ضمن حصة المستخدم الشخصية على Google Drive. يتم فقط تخزين أحدث نسخة احتياطية. عند إجراء عملية الاحتفاظ بنسخة احتياطية، يتم حذف أي نسخة احتياطية سابقة. لا يمكن للمستخدم أو التطبيقات الأخرى على الجهاز قراءة البيانات الاحتياطية.

يمكن للمستخدمين الاطّلاع على قائمة بالتطبيقات التي تم الاحتفاظ بنسخة احتياطية منها في تطبيق Google Drive لأجهزة Android. على جهاز Android، يمكن للمستخدمين العثور على هذه القائمة في لوحة التنقّل في تطبيق Drive ضمن الإعدادات > الاحتفاظ بنسخة احتياطية من البيانات وإعادة الضبط.

يتم تخزين النُسخ الاحتياطية من كل فترة إعداد جهاز في مجموعات بيانات منفصلة، كما هو описан في الأمثلة التالية:

  • إذا كان المستخدم يمتلك جهازين، فإن هناك مجموعة بيانات احتياطية لكل جهاز.

  • إذا أعاد المستخدم ضبط جهاز على الإعدادات الأصلية ثم أعد ضبطه باستخدام الحساب نفسه، يتم تخزين النسخة الاحتياطية في مجموعة بيانات جديدة. يتم تلقائيًا حذف مجموعات البيانات القديمة بعد فترة من عدم النشاط.

الجدول الزمني للنسخ الاحتياطي

يتم الاحتفاظ بنسخة احتياطية تلقائيًا عند استيفاء جميع الشروط التالية:

  • فعَّل المستخدم ميزة "الاحتفاظ بنسخة احتياطية" على الجهاز. في Android 9، يمكنك العثور على هذا الإعداد في الإعدادات > النظام > الاحتفاظ بنسخة احتياطية.
  • مرّت 24 ساعة على الأقل على آخر عملية الاحتفاظ بنسخة احتياطية.
  • الجهاز غير نشِط.
  • أن يكون الجهاز متصلاً بشبكة Wi-Fi (إذا لم يوافق مستخدم الجهاز على الاحتفاظ بنسخة احتياطية من البيانات باستخدام بيانات الجوّال)

من الناحية العملية، تحدث هذه الحالات كل ليلة تقريبًا، ولكن قد عدم النسخ الاحتياطي مطلقًا (على سبيل المثال، إذا لم يتصل مطلقًا بإحدى الشبكات). للحفاظ على معدل نقل البيانات في الشبكة، لا يتم التحميل إلا إذا تغيّرت بيانات التطبيق.

أثناء ميزة "النسخ الاحتياطي التلقائي"، يوقف النظام التطبيق للتأكّد من أنّه لم يعُد يكتب في نظام الملفات. يتجاهل نظام الاحتفاظ بنسخة احتياطية تلقائيًا التطبيقات التي تتم إدارتها في المقدّمة لتجنّب تقديم تجربة استخدام سيئة. يمكنك إلغاء السلوك التلقائي عن طريق ضبط سمة android:backupInForeground على true.

لتبسيط عملية الاختبار، يتضمّن Android أدوات تتيح لك بدء عملية يدوية للحفاظ على نسخة احتياطية من تطبيقك. لمزيد من المعلومات، يُرجى الاطّلاع على اختبار الاحتفاظ بنسخة احتياطية من البيانات واستعادتها.

استعادة الجدول الزمني

تتم استعادة البيانات عند تثبيت التطبيق، سواء من "متجر Play" أو أثناء إعداد الجهاز (عندما يُثبِّت النظام التطبيقات المثبَّتة سابقًا) أو من خلال تنفيذ عملية تثبيت adb. تحدث عملية الاستعادة بعد تثبيت حزمة APK ولكن قبل أن يصبح التطبيق متاحًا ليشغّله المستخدم.

أثناء المعالج الأولي لإعداد الجهاز، تظهر للمستخدم قائمة بالحسابات المتاحة مجموعات البيانات الاحتياطية ويتم السؤال عن أي واحدة تريد استعادة البيانات منها. أي نسخة احتياطية مجموعة البيانات تصبح مجموعة بيانات الأسلاف للجهاز. يمكن للجهاز استعادة البيانات من النُسخ الاحتياطية الخاصة به أو من مجموعة البيانات الأصلية. إذا كانت هناك نُسخ احتياطية من يكون كلا المصدرين متاحَين، سيعطي الجهاز الأولوية للنسخ الاحتياطي. إذا لم ينفِّذ المستخدم معالج إعداد الجهاز، لن يتمكّن الجهاز من الاستعادة إلا من نسخه الاحتياطية.

لتبسيط عملية الاختبار، يتضمّن Android أدوات تتيح لك بدء عملية استعادة تطبيقك يدويًا. لمزيد من المعلومات، يُرجى الاطّلاع على اختبار ميزة "الاحتفاظ بنسخة احتياطية" و"استعادة".

تفعيل ميزة الاحتفاظ بنسخة احتياطية وإيقافها

تشارك التطبيقات التي تستهدف الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث تلقائيًا في ميزة "الاحتفاظ بنسخة احتياطية تلقائية". في ملف بيان التطبيق، اضبط القيمة المنطقية android:allowBackup لتفعيل ميزة "الاحتفاظ بنسخة احتياطية" أو إيقافها. القيمة الافتراضية هي true، ولكن ننصحك بضبط السمة صراحةً في ملف البيان، وذلك على النحو التالي: كما هو موضح في المثال التالي:

<manifest ... >
    ...
    <application android:allowBackup="true" ... >
        ...
    </application>
</manifest>

يمكنك إيقاف ميزة "الاحتفاظ بنسخة احتياطية" من خلال ضبط القيمة android:allowBackup على false. قد تحتاج إلى إجراء ذلك إذا كان بإمكان تطبيقك إعادة إنشاء حالته من خلال آلية أخرى أو إذا كان تطبيقك يتعامل مع معلومات حسّاسة.

تضمين الملفات واستبعادها

يحتفظ النظام تلقائيًا بنسخة احتياطية من جميع بيانات التطبيقات تقريبًا. لمزيد من المعلومات، يُرجى الاطّلاع على القسم حول الملفات التي يتم الاحتفاظ بنسخة احتياطية منها.

يوضّح لك هذا القسم كيفية تحديد قواعد XML مخصّصة للتحكّم في المحتوى الذي يتم الاحتفاظ بنسخة احتياطية منه. إذا كان تطبيقك يستهدف الإصدار 12 من نظام التشغيل Android (المستوى 31 لواجهة برمجة التطبيقات) أو إصدارًا أحدث، عليك تحديد مجموعة إضافية من قواعد النسخ الاحتياطي بتنسيق XML، كما هو موضح في هذا القسم، دعم التغييرات المتعلقة باستعادة النسخ الاحتياطي التي تم تقديمها للأجهزة لتشغيل هذه الإصدارات من Android.

التحكّم في ميزة "الاحتفاظ بنسخة احتياطية" على الإصدار 11 من نظام التشغيل Android والإصدارات الأقدم

اتّبِع الخطوات الواردة في هذا القسم للتحكّم في الملفات التي يتم الاحتفاظ بنسخة احتياطية منها على الأجهزة. الأجهزة التي تعمل بنظام التشغيل Android 11 (المستوى 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>

تحديد شروط الجهاز المطلوبة للاحتفاظ بنسخة احتياطية

إذا كان تطبيقك يحفظ معلومات حسّاسة على الجهاز، يمكنك تحديد الشروط التي يتم بموجبها تضمين بيانات تطبيقك في النسخة الاحتياطية للمستخدم. يمكنك إضافة الشروط التالية في الإصدار 9 من نظام التشغيل Android (المستوى 28 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث:

في حال ترقية أجهزة التطوير إلى الإصدار 9 من Android، عليك إيقاف ثم إعادة تمكين النسخ الاحتياطي للبيانات بعد الترقية. ويرجع ذلك إلى أنّ نظام 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 بنفسك، يمكنك أيضًا تطبيق هذه المتطلبات الشرطية. إلى منطق النسخ الاحتياطي لديك عن طريق إجراء مقارنة حكيمة بين مجموعة علامات النقل والنسخ الاحتياطية المخصصة الخاصة بالكائن 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 أو الإصدارات الأحدث

إذا كان تطبيقك يستهدف الإصدار 12 من Android (المستوى 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 الذي يستهدفه تطبيقك ويعمل عليه.

الإصدار 11 من نظام التشغيل Android أو الإصدارات الأقدم

استخدام بنية 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>

الإصدار 12 من نظام التشغيل Android أو إصدار أحدث

إذا كان تطبيقك يستهدف الإصدار 12 من نظام التشغيل Android (المستوى 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 Drive أثناء الاستمرار في نقلها خلال عمليات النقل من جهاز إلى آخر (D2D) يكون هذا مفيدًا إذا لديك ملفات كبيرة جدًا بحيث لا يمكن الاحتفاظ بنسخة احتياطية منها على السحابة الإلكترونية ولكن يمكن نقلها بين الأجهزة بدون مشكلة.

إذا لم تكن هناك قواعد لوضع احتياطي معيّن، مثل ما إذا كان وضع لم يتم تضمين قسم "<device-transfer>". تم تفعيل هذا الوضع بالكامل للجميع. باستثناء الأدلة no-backup وcache، كما هو موضح في قسم الملفات التي تم الاحتفاظ بنسخة احتياطية منها.

يمكن لتطبيقك ضبط العلامة disableIfNoEncryptionCapabilities في القسم <cloud-backup> للتأكّد من عدم إجراء عملية الاحتفاظ بنسخة احتياطية إلا إذا كان يمكن تشفيرها، مثلما هو الحال عندما يكون لدى المستخدم شاشة قفل. ضبط هذا القيد إيقاف إرسال النُسخ الاحتياطية إلى السحابة إذا لم يتمكن جهاز المستخدم من دعم ولكن نظرًا لأن عمليات النقل من نوع D2D لا يتم إرسالها إلى الخادم، تتم للعمل حتى على الأجهزة التي لا تتيح التشفير.

بنية تضمين العناصر واستبعادها

داخل <full-backup-content> و<cloud-backup> و<device-transfer> (حسب إصدار Android على الجهاز و targetSDKVersion)، يمكنك تحديد العناصر <include> و<exclude> على النحو التالي:

<include>

تُستخدَم لتحديد ملف أو مجلد للاحتفاظ بنسخة احتياطية منه. تطبيق التحميل التلقائي بشكل تلقائي جميع ملفات التطبيقات تقريبًا. في حال تحديد عنصر <include>، لن يضمّن النظام أي ملفات تلقائيًا ولن يحتفظ بنسخة احتياطية إلا من الملفات المحدّدة. لتضمين ملفات متعددة، استخدِم عناصر <include> متعددة.

في نظام التشغيل Android 11 والإصدارات الأقدم، يمكن أن يحتوي هذا العنصر أيضًا على سمة requireFlags، ويصف القسم كيفية تعريفها بمزيد من التفصيل حول المتطلبات الشرطية للاحتفاظ بنسخة احتياطية

الملفات المتوفّرة في الأدلة التي يعرضها getCacheDir() أو getCodeCacheDir() أو يتم دائمًا استبعاد getNoBackupFilesDir() حتى إذا حاولت تضمينها.

<exclude>

لتحديد ملف أو مجلد لاستبعاده أثناء الاحتفاظ بنسخة احتياطية في ما يلي بعض الملفات التي يتم استبعادها عادةً من الخدمة الاحتياطية:

  • الملفات التي تتضمّن معرّفات خاصة بالجهاز، والتي تكون صادرة عن خادم أو يتم إنشاؤها على الجهاز على سبيل المثال، تحتاج خدمة المراسلة عبر السحابة الإلكترونية من Firebase (FCM) إلى إنشاء رمز تنشيط كلما ثبَّت أحد المستخدمين تطبيقك على جهاز جديد. في حال إعادة استخدام رمز التسجيل القديم، قد يتصرف التطبيق بشكل غير متوقّع.

  • الملفات ذات الصلة بتصحيح أخطاء التطبيقات

  • الملفات الكبيرة التي تتسبب في تجاوز التطبيق لحصة الاحتفاظ بنسخة احتياطية التي تبلغ 25 ميغابايت

يجب أن يتضمّن كل عنصر من عنصرَي <include> و<exclude> سمتَين يليهما:

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 مخصّصة. وعادةً ما يكون هناك سببين للقيام بذلك:

  • تريد تلقّي إشعارات بأحداث النسخ الاحتياطي، مثل onRestoreFinished() وonQuotaExceeded(long, long) يتم تنفيذ طرق طلب معاودة الاتصال هذه حتى إذا لم يكن التطبيق قيد التشغيل.

  • لا يمكنك بسهولة التعبير عن مجموعة الملفات التي تريد الاحتفاظ بنسخة احتياطية منها باستخدام قواعد XML . في هذه الحالات النادرة، يمكنك تنفيذ BackupAgent تلغي onFullBackup(FullBackupDataOutput) لتخزين ما تريده. للاحتفاظ بتنفيذ النظام التلقائي، استخدِم super.onFullBackup() لاستدعاء الطريقة المقابلة في الفئة الفائقة.

في حال تنفيذ BackupAgent، يتوقع النظام تلقائيًا تنفيذ ما يلي: إجراء النسخ الاحتياطي واستعادة القيمة المفتاحية. لاستخدام ميزة التحميل التلقائي المستندة إلى الملفات بدلاً من ذلك، اضبط السمة android:fullBackupOnly على true في التطبيق.

أثناء عمليات النسخ الاحتياطي والاستعادة التلقائية، يشغِّل النظام التطبيق في وضع محظور لمنع التطبيق من الوصول إلى الملفات التي قد تتسبّب في تعارضات والسماح للتطبيق بتنفيذ طرق طلب معاودة الاتصال في BackupAgent. في هذا الوضع المحدود، لا يتم تشغيل النشاط الرئيسي للتطبيق تلقائيًا، ولا يتم إعداد موفّري المحتوى، ويتم إنشاء مثيل للصف الأساسية Application بدلاً من أي فئة فرعية تم الإعلان عنها في بيان التطبيق.

يجب أن تنفذ BackupAgent الطرق التجريدية onBackup() onRestore()، التي تُستخدم للاحتفاظ بنسخة احتياطية من المفتاح/القيمة. إذا كنت لا تريد إجراء الاحتفاظ بنسخة احتياطية من المفاتيح والقيم، يمكنك ترك تنفيذ هذه الطرق فارغًا.

لمزيد من المعلومات، يُرجى الاطّلاع على مقالة توسيع نطاق BackupAgent.