قابلیت AutoBackup اندروید
یکی از سوالاتی که همیشه بعد از ساخت یک پروژه ی جدید توی اندروید استدیو ذهنمو مشغول میکرد وجود تگ
android:allowBackup="true"
توی
Manifest
بخش
application
بود که توی این پست اون چیزی که یاد گرفتم رو نوشتم.
گوگل از ورژن ششم سیستم عامل اندروید
(API 23)
قابلیتی به نام
Allow Backup
رو ارایه کرد که راهکاری برای بکآپ گرفتن از و ریستور کردن دیتاهای
private
اپلیکیشن هاست.
Auto Backup
با آپلودکردن این دیتاها روی اکانت گوگل کاربر با محدودیت ۲۵ مگابایتی این نسخه پشتیبان رو تهیه میکنه.
از کدوم فایلها بکآپ تهیه میشه؟
- فایل های SharedPrefrences
- فایلهایی نوشته شده روی حافظهداخلی که با
getFilesDir()
یاgetDir()
در دسترسند. - فایلهایی که از طریق
getDatabasePath()
در دسترسند و فایلهایی که از طریقSqliteOpenHelper
ساخته میشن. - فایلهای که از طریق
getExternalFilesDir()
در دسترسند.
Auto Backup دایرکتوری های getCacheDir()
و getCodeCacheDir()
و getNoBackupFilesDir()
رو نادیده میگیره. چرا که تمامی فایلهای این دایرکتوری ها temperary هستند.
این بکآپ ها کجا ذخیره میشن؟
این فایلها روی اکانت Google Drive کاربر با محدودیت ۲۵ مگابایتی برای هر اپلیکیشن ذخیره میشن.
همیشه آخرین نسخه ی بکآپ توسط گوگل نگهداری میشه و با آپلود شدن نسخه ی جدید، نسخه ی قبلی به طور خودکار حذف میشه.
لیست اپلیکیشن هایی که از Auto Backup استفاده میکنن از طریق
Setting -> Auto backup for apps -> Manage backup
در دسترس هست. این فایهای بکآپ روی دستگاه غیرقابل خواندن هستن.
این data ها برای هر دستگاه dataset مجزایی دارد.
اگر دستگاهی factory reset شود و مجددا با همان اکانت شروع به کار کند dataset جدیدی به آن اختصاص داده شده و dateset قبلی، بعد از مدتی غیرفعال بودن به طور خودکار حذف میگردد.
برنامهزمانی فرآیند بکآپ
وقتی همه شرایط زیر برقرار باشه بکآپ گرفتن انجام میشود:
- این قابلیت روی دستگاه فعال باشه.
- ۲۴ ساعت از بکآپ قبلی گذشته باشه.
- دستگاه درحالت آماده به کار (idle) و درحال شارژ باشد.
- دستگاه متصل به wi-fi باشد.
برای صرفه جویی در مصرف پهنای باند، تنها زمانی که دیتا تغییر کرده باشد این فرآیند انجام میگیرد.
چه زمانی این بکآپ ها ریستور میشن؟
تنها در زمان نصب برنامه این دیتاها از روی سرور های گوگل دریافت و ریستور میشن. دقیقا زمانی که نصب تکمیل میشه. قبل از اجرا شدن برنامه.
فعالسازی بکآپ روی اپلیکیشن
اپلیکیشن هایی که با تارگت ۲۳ و بالاتر ساخته میشن به طور پیشفرض مقدار ویژگی
android:allowBackup
در فایل
Android Manifest
آنها برابر
true
هست. که به معنی فعال بودن
Auto Backup
روی این برنامه ست.
برای غیرفعال سازی کافیه این مقدار رو برابر با
false
قرار بدیم..
چنانچه مکانیسم خاصی برای دیتاهای اپلیکیشنمون داشته باشیم یا اپلیکیشن حاوی اطلاعات حساس و مهم باشه بهتره Auto Backup رو غیرفعال کنیم.
دیگه چي؟
از امکانات دیگه ی Auto Backup میشه به قابلیت مدیریت فایلهای قابل بکآپ + شخصیسازی فرآیند بکآپ گرفتن و ریستور کردن دیتاها و همچنین دریافت callback های مختلف این فرآیند + توسط پیاده سازی کلاسی به نام BackupAgent ، اشاره کرد.
درحالت عادی دیتاها به صورت
key/value
بکآپ گرفته میشن اما با تنظیم
android:fullBackupOnly="true"
این فرآیند به صورت فایل محور انجام میشه.(البته به شرط پیاده سازی BackupAgent)
کمی اطلاعات مفید
حین انجام فرآیند بکآپ گرفتن سیستم عامل برنامه رو در حالت restricted mode اجرا میکنه تا از دسترسی به فایلهایی که ممکنه conflict داشته باشن جلوگیری کنه و هم callback های مربوط به اجرا شدن اپ در BackupAgent رو فراخوانی کنه.
نکته: در حالت restricted mode در ابتدا اکتیویتی لانچر اجرا نمیشه. Content Provider هم مقدار دهی نشده و بجای Application معرفی شده در Manifest یک instance جدا از کلاس Application برنامه رو مدیریت میکنه.