اندروید از یک سیستم فایل مشابه سیستم فایل مبتنی بر دیسک در سایر پلتفرمها استفاده میکند. این سیستم چندین گزینه برای ذخیره دادههای برنامه شما ارائه میدهد:
- فضای ذخیرهسازی مخصوص برنامه: فایلهایی را که فقط برای استفاده برنامه شما در نظر گرفته شدهاند، یا در دایرکتوریهای اختصاصی در یک فضای ذخیرهسازی داخلی یا دایرکتوریهای اختصاصی مختلف در فضای ذخیرهسازی خارجی ذخیره کنید. از دایرکتوریهای موجود در فضای ذخیرهسازی داخلی برای ذخیره اطلاعات حساسی که سایر برنامهها نباید به آنها دسترسی داشته باشند، استفاده کنید.
- فضای ذخیرهسازی مشترک: فایلهایی را که برنامه شما قصد دارد با سایر برنامهها به اشتراک بگذارد، از جمله رسانهها، اسناد و سایر فایلها، ذخیره کنید.
- تنظیمات برگزیده: دادههای خصوصی و اولیه را در جفتهای کلید-مقدار ذخیره کنید.
- پایگاههای داده: دادههای ساختاریافته را با استفاده از کتابخانهی Room persistence در یک پایگاه دادهی خصوصی ذخیره کنید.
ویژگیهای این گزینهها در جدول زیر خلاصه شده است:
| نوع محتوا | روش دسترسی | مجوزهای مورد نیاز | آیا برنامههای دیگر میتوانند دسترسی داشته باشند؟ | فایلها هنگام حذف برنامه حذف میشوند؟ | |
|---|---|---|---|---|---|
| فایلهای مخصوص برنامه | فایلهایی که فقط برای استفاده برنامه شما در نظر گرفته شدهاند | از حافظه داخلی، getFilesDir() یا getCacheDir()از حافظه خارجی، getExternalFilesDir() یا getExternalCacheDir() | هرگز به حافظه داخلی نیاز نداشته است وقتی برنامه شما روی دستگاههایی با اندروید ۴.۴ (سطح API ۱۹) یا بالاتر اجرا میشود، برای حافظه خارجی لازم نیست | خیر | بله |
| رسانه | فایلهای رسانهای قابل اشتراکگذاری (تصاویر، فایلهای صوتی، ویدیوها) | رابط برنامهنویسی کاربردی MediaStore | READ_EXTERNAL_STORAGE هنگام دسترسی به فایلهای برنامههای دیگر در اندروید ۱۱ (سطح API 30) یا بالاترREAD_EXTERNAL_STORAGE یا WRITE_EXTERNAL_STORAGE هنگام دسترسی به فایلهای برنامههای دیگر در اندروید ۱۰ (سطح API ۲۹)مجوزها برای همه فایلها در اندروید ۹ (سطح API ۲۸) یا پایینتر مورد نیاز است | بله، اگرچه برنامهی دیگر به مجوز READ_EXTERNAL_STORAGE نیاز دارد | خیر |
| اسناد و سایر فایلها | انواع دیگر محتوای قابل اشتراکگذاری، از جمله فایلهای دانلود شده | چارچوب دسترسی به ذخیرهسازی | هیچکدام | بله، از طریق انتخابگر فایل سیستم | خیر |
| تنظیمات برگزیده برنامه | جفتهای کلید-مقدار | کتابخانه تنظیمات جتپک | هیچکدام | خیر | بله |
| پایگاه داده | دادههای ساختاریافته | کتابخانه پایداری اتاق | هیچکدام | خیر | بله |
راه حلی که انتخاب میکنید به نیازهای خاص شما بستگی دارد:
- دادههای شما به چه مقدار فضا نیاز دارند؟
- حافظه داخلی فضای محدودی برای دادههای مخصوص برنامه دارد. اگر نیاز به ذخیره حجم قابل توجهی از دادهها دارید، از انواع دیگر حافظه استفاده کنید.
- دسترسی به دادهها چقدر باید قابل اعتماد باشد؟
- اگر عملکرد اساسی برنامه شما به دادههای خاصی نیاز دارد، مانند زمان شروع برنامه، دادهها را در دایرکتوری حافظه داخلی یا یک پایگاه داده قرار دهید. فایلهای مخصوص برنامه که در حافظه خارجی ذخیره میشوند، همیشه قابل دسترسی نیستند زیرا برخی دستگاهها به کاربران اجازه میدهند دستگاه فیزیکی مربوط به حافظه خارجی را حذف کنند.
- چه نوع دادههایی را برای ذخیره نیاز دارید؟
- اگر دادههایی دارید که فقط برای برنامه شما معنیدار هستند، از فضای ذخیرهسازی مخصوص برنامه استفاده کنید. برای محتوای رسانهای قابل اشتراکگذاری، از فضای ذخیرهسازی مشترک استفاده کنید تا سایر برنامهها بتوانند به محتوا دسترسی داشته باشند. برای دادههای ساختاریافته، از تنظیمات برگزیده (برای دادههای کلید-مقدار) یا از پایگاه داده (برای دادههایی که شامل بیش از ۲ ستون هستند) استفاده کنید.
- آیا دادهها باید برای برنامه شما خصوصی باشند؟
- هنگام ذخیره دادههای حساس - دادههایی که نباید از هیچ برنامه دیگری قابل دسترسی باشند - از حافظه داخلی، تنظیمات برگزیده یا یک پایگاه داده استفاده کنید. حافظه داخلی این مزیت را دارد که دادهها از کاربران پنهان هستند.
دسته بندی مکان های ذخیره سازی
اندروید دو نوع مکان ذخیرهسازی فیزیکی ارائه میدهد: حافظه داخلی و حافظه خارجی . در اکثر دستگاهها، حافظه داخلی از حافظه خارجی کوچکتر است. با این حال، حافظه داخلی همیشه در همه دستگاهها در دسترس است و آن را به مکانی مطمئنتر برای قرار دادن دادههایی که برنامه شما به آنها وابسته است، تبدیل میکند.
حافظههای قابل جابجایی، مانند کارت SD، در سیستم فایل به عنوان بخشی از حافظه خارجی نمایش داده میشوند. اندروید این دستگاهها را با استفاده از مسیری مانند /sdcard نمایش میدهد.
خود برنامهها به طور پیشفرض در حافظه داخلی ذخیره میشوند. با این حال، اگر حجم APK شما بسیار زیاد است، میتوانید در فایل مانیفست برنامه خود، ترجیحی را برای نصب برنامه در حافظه خارجی تعیین کنید:
<manifest ... android:installLocation="preferExternal"> ... </manifest>
مجوزها و دسترسی به حافظه خارجی
اندروید مجوزهای مربوط به فضای ذخیرهسازی زیر را تعریف میکند: READ_EXTERNAL_STORAGE ، WRITE_EXTERNAL_STORAGE و MANAGE_EXTERNAL_STORAGE .
در نسخههای قبلی اندروید، برنامهها برای دسترسی به هر فایلی خارج از دایرکتوریهای مخصوص برنامه در حافظه خارجی، باید مجوز READ_EXTERNAL_STORAGE را اعلام میکردند. همچنین، برنامهها برای نوشتن در هر فایلی خارج از دایرکتوری مخصوص برنامه، باید مجوز WRITE_EXTERNAL_STORAGE را اعلام میکردند.
نسخههای جدیدتر اندروید برای تعیین توانایی برنامه در دسترسی و نوشتن در یک فایل مشخص، بیشتر به هدف فایل تکیه میکنند تا موقعیت مکانی آن. به طور خاص، اگر برنامه شما اندروید ۱۱ (سطح API 30) یا بالاتر را هدف قرار میدهد، مجوز WRITE_EXTERNAL_STORAGE هیچ تاثیری بر دسترسی برنامه شما به فضای ذخیرهسازی ندارد. این مدل ذخیرهسازی مبتنی بر هدف، حریم خصوصی کاربر را بهبود میبخشد زیرا برنامهها فقط به قسمتهایی از سیستم فایل دستگاه که واقعاً از آنها استفاده میکنند، دسترسی دارند.
اندروید ۱۱ مجوز MANAGE_EXTERNAL_STORAGE را معرفی میکند که دسترسی نوشتن به فایلهای خارج از دایرکتوری مخصوص برنامه و MediaStore را فراهم میکند. برای کسب اطلاعات بیشتر در مورد این مجوز و اینکه چرا اکثر برنامهها برای انجام موارد استفاده خود نیازی به اعلام آن ندارند، به راهنمای نحوه مدیریت همه فایلها در یک دستگاه ذخیرهسازی مراجعه کنید.
ذخیرهسازی محدود
برای اینکه کاربران کنترل بیشتری روی فایلهای خود داشته باشند و از شلوغی فایلها جلوگیری شود، به برنامههایی که اندروید ۱۰ (سطح API ۲۹) و بالاتر را هدف قرار میدهند، به طور پیشفرض دسترسی محدود به حافظه خارجی یا scoped storage داده میشود. چنین برنامههایی فقط به دایرکتوری مخصوص برنامه در حافظه خارجی و همچنین انواع خاصی از رسانههایی که برنامه ایجاد کرده است، دسترسی دارند.
از فضای ذخیرهسازی محدود استفاده کنید، مگر اینکه برنامه شما نیاز به دسترسی به فایلی داشته باشد که خارج از یک دایرکتوری مخصوص برنامه و خارج از دایرکتوری که APIهای MediaStore میتوانند به آن دسترسی داشته باشند، ذخیره شده است. اگر فایلهای مخصوص برنامه را در فضای ذخیرهسازی خارجی ذخیره میکنید، میتوانید با قرار دادن این فایلها در یک دایرکتوری مخصوص برنامه در فضای ذخیرهسازی خارجی ، استفاده از فضای ذخیرهسازی محدود را آسانتر کنید. به این ترتیب، برنامه شما هنگام فعال بودن فضای ذخیرهسازی محدود، دسترسی به این فایلها را حفظ میکند.
برای آمادهسازی برنامه خود برای ذخیرهسازی محدود، به راهنمای موارد استفاده و بهترین شیوههای ذخیرهسازی مراجعه کنید. اگر برنامه شما مورد استفاده دیگری دارد که تحت پوشش ذخیرهسازی محدود نیست، یک درخواست ویژگی ثبت کنید . میتوانید بهطور موقت از استفاده از ذخیرهسازی محدود انصراف دهید .
مشاهده فایلها در یک دستگاه
برای مشاهده فایلهای ذخیره شده در یک دستگاه، از Device File Explorer اندروید استودیو استفاده کنید.
منابع اضافی
برای اطلاعات بیشتر در مورد ذخیرهسازی دادهها، به منابع زیر مراجعه کنید.