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

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

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

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

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

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

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

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

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

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

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

<include>

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

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

يتم دائمًا استبعاد الملفات في الأدلة التي يعرضها 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.