اندروید از یک سیستم فایل مشابه سیستم فایل مبتنی بر دیسک در سایر پلتفرمها استفاده میکند. این سیستم چندین گزینه برای ذخیره دادههای برنامه شما ارائه میدهد:
- فضای ذخیرهسازی مخصوص برنامه: فایلهایی را که فقط برای استفاده برنامه شما در نظر گرفته شدهاند، یا در دایرکتوریهای اختصاصی در یک فضای ذخیرهسازی داخلی یا دایرکتوریهای اختصاصی مختلف در فضای ذخیرهسازی خارجی ذخیره کنید. از دایرکتوریهای موجود در فضای ذخیرهسازی داخلی برای ذخیره اطلاعات حساسی که سایر برنامهها نباید به آنها دسترسی داشته باشند، استفاده کنید.
- فضای ذخیرهسازی مشترک: فایلهایی را که برنامه شما قصد دارد با سایر برنامهها به اشتراک بگذارد، از جمله رسانهها، اسناد و سایر فایلها، ذخیره کنید.
- تنظیمات برگزیده: دادههای خصوصی و اولیه را در جفتهای کلید-مقدار ذخیره کنید.
- پایگاههای داده: دادههای ساختاریافته را با استفاده از کتابخانهی 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 .
در نسخههای قبلی اندروید، برنامهها برای دسترسی به هر فایلی خارج از