تُنشئ ميزة الاحتفاظ بنسخة احتياطية تلقائية من التطبيقات نسخة احتياطية تلقائيًا من بيانات المستخدم من التطبيقات التي تستهدف نظام التشغيل 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 لواجهة برمجة التطبيقات) أو إصدار أقل.
في ملف
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>
تحديد شروط الجهاز المطلوبة للاحتفاظ بنسخة احتياطية
إذا كان تطبيقك يحفظ معلومات حسّاسة على الجهاز، يمكنك تحديد الشروط التي يتم بموجبها تضمين بيانات تطبيقك في النسخة الاحتياطية للمستخدم. يمكنك إضافة الشروط التالية في الإصدار 9 من نظام التشغيل Android (المستوى 28 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث:
clientSideEncryption
: يتم تشفير النسخة الاحتياطية للمستخدم باستخدام سر من جهة العميل. يتم تفعيل هذا النوع من التشفير على الأجهزة التي تعمل بالإصدار 9 من Android أو إصدار أحدث شرط أن يكون المستخدم قد فعّل ميزة "الاحتفاظ بنسخة احتياطية" في الإصدار 9 من Android أو إصدار أحدث وضبط قفل شاشة (رقم تعريف شخصي أو نقش أو كلمة مرور) على جهازه.deviceToDeviceTransfer
: ينقل المستخدم النسخة الاحتياطية إلى جهاز آخر يتيح النقل من جهاز إلى جهاز على الجهاز (مثل Google Pixel).
إذا كنت قد أجريت ترقية لأجهزة التطوير إلى Android 9، عليك إيقاف ميزة الاحتفاظ بنسخة احتياطية من البيانات، ثم إعادة تفعيلها بعد الترقية. ويرجع ذلك إلى أنّ نظام Android لا يفكّر في تشفير النُسخ الاحتياطية إلا باستخدام مفتاح سري من جهة العميل بعد إبلاغ المستخدمين في "الإعدادات" أو معالج الإعداد.
لتحديد شروط التضمين، اضبط سمة requireFlags
على قيمة أو قيم محدّدة في عناصر <include>
ضمن مجموعة قواعد
الاحتياطية:
<?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 أو الإصدارات الأحدث.
في ملف
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 الذي يستهدفه تطبيقك ويعمل عليه.
الإصدار 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.