مروری بر ذخیره سازی داده ها و فایل ها

اندروید از سیستم فایلی مشابه سیستم فایل مبتنی بر دیسک در سایر پلتفرم ها استفاده می کند. این سیستم چندین گزینه را برای شما فراهم می کند تا داده های برنامه خود را ذخیره کنید:

  • فضای ذخیره‌سازی ویژه برنامه: فایل‌هایی را که فقط برای استفاده برنامه شما در نظر گرفته شده‌اند، یا در فهرست‌های اختصاصی در یک حجم حافظه داخلی یا فهرست‌های اختصاصی متفاوت در حافظه خارجی ذخیره کنید. از دایرکتوری های موجود در حافظه داخلی برای ذخیره اطلاعات حساسی که سایر برنامه ها نباید به آنها دسترسی داشته باشند، استفاده کنید.
  • فضای ذخیره‌سازی مشترک: فایل‌هایی را ذخیره کنید که برنامه شما قصد دارد با سایر برنامه‌ها از جمله رسانه، اسناد و فایل‌های دیگر به اشتراک بگذارد.
  • ترجیحات: داده های خصوصی و اولیه را در جفت های کلید-مقدار ذخیره کنید.
  • پایگاه های داده: داده های ساخت یافته را در یک پایگاه داده خصوصی با استفاده از کتابخانه تداوم اتاق ذخیره کنید.

ویژگی های این گزینه ها در جدول زیر خلاصه شده است:

نوع محتوا روش دسترسی مجوزهای مورد نیاز آیا برنامه های دیگر می توانند دسترسی داشته باشند؟ فایل‌ها در حذف برنامه حذف شدند؟
فایل های مخصوص برنامه فایل‌هایی که فقط برای استفاده برنامه شما طراحی شده‌اند از حافظه داخلی، getFilesDir() یا getCacheDir()

از حافظه خارجی، getExternalFilesDir() یا getExternalCacheDir()
هرگز برای حافظه داخلی مورد نیاز نیست

هنگامی که برنامه شما در دستگاه‌های دارای Android نسخه 4.4 (سطح API 19) یا بالاتر استفاده می‌شود، برای ذخیره‌سازی خارجی مورد نیاز نیست.
خیر بله
رسانه ها فایل های رسانه ای قابل اشتراک گذاری (تصاویر، فایل های صوتی، فیلم ها) MediaStore API READ_EXTERNAL_STORAGE هنگام دسترسی به فایل‌های برنامه‌های دیگر در Android 11 (سطح API 30) یا بالاتر

READ_EXTERNAL_STORAGE یا WRITE_EXTERNAL_STORAGE هنگام دسترسی به فایل‌های برنامه‌های دیگر در Android 10 (سطح API 29)

مجوزها برای همه فایل‌های اندروید 9 (سطح API 28) یا پایین‌تر مورد نیاز است
بله، اگرچه برنامه دیگر به مجوز READ_EXTERNAL_STORAGE نیاز دارد خیر
اسناد و فایل های دیگر انواع دیگر محتوای قابل اشتراک گذاری، از جمله فایل های دانلود شده چارچوب دسترسی به فضای ذخیره سازی هیچ کدام بله، از طریق انتخابگر فایل سیستم خیر
تنظیمات برگزیده برنامه جفت های کلید-مقدار کتابخانه تنظیمات Jetpack هیچ کدام خیر بله
پایگاه داده داده های ساخت یافته کتابخانه ماندگاری اتاق هیچ کدام خیر بله

راه حلی که انتخاب می کنید به نیازهای خاص شما بستگی دارد:

اطلاعات شما به چه مقدار فضا نیاز دارد؟
حافظه داخلی فضای محدودی برای داده های خاص برنامه دارد. در صورت نیاز به ذخیره مقدار قابل توجهی داده، از انواع دیگر ذخیره سازی استفاده کنید.
دسترسی به داده ها چقدر باید قابل اعتماد باشد؟
اگر عملکرد اصلی برنامه شما به داده های خاصی نیاز دارد، مانند زمانی که برنامه شما در حال راه اندازی است، داده ها را در فهرست حافظه داخلی یا یک پایگاه داده قرار دهید. فایل‌های مخصوص برنامه‌ای که در حافظه خارجی ذخیره می‌شوند همیشه قابل دسترسی نیستند زیرا برخی از دستگاه‌ها به کاربران اجازه می‌دهند دستگاه فیزیکی مربوط به حافظه خارجی را حذف کنند.
چه نوع داده هایی برای ذخیره سازی نیاز دارید؟
اگر داده‌هایی دارید که فقط برای برنامه شما معنادار است، از فضای ذخیره‌سازی مخصوص برنامه استفاده کنید. برای محتوای رسانه ای قابل اشتراک گذاری، از فضای ذخیره سازی مشترک استفاده کنید تا سایر برنامه ها بتوانند به محتوا دسترسی داشته باشند. برای داده های ساختاریافته، از ترجیحات (برای داده های کلید-مقدار) یا پایگاه داده (برای داده هایی که بیش از 2 ستون دارند) استفاده کنید.
آیا داده ها باید برای برنامه شما خصوصی باشند؟
هنگام ذخیره داده های حساس -داده هایی که نباید از هیچ برنامه دیگری قابل دسترسی باشند- از حافظه داخلی، تنظیمات برگزیده یا پایگاه داده استفاده کنید. فضای ذخیره‌سازی داخلی مزیت بیشتری دارد که داده‌ها از دید کاربران پنهان می‌شوند.

دسته بندی مکان های ذخیره سازی

Android دو نوع مکان ذخیره سازی فیزیکی را ارائه می دهد: حافظه داخلی و حافظه خارجی . در اکثر دستگاه ها، حافظه داخلی کوچکتر از حافظه خارجی است. با این حال، حافظه داخلی همیشه در همه دستگاه‌ها در دسترس است، و آن را به مکانی مطمئن‌تر برای قرار دادن داده‌هایی که برنامه شما به آن وابسته است تبدیل می‌کند.

حجم های قابل جابجایی، مانند کارت SD، در سیستم فایل به عنوان بخشی از حافظه خارجی ظاهر می شوند. Android این دستگاه ها را با استفاده از مسیری مانند /sdcard نشان می دهد.

خود برنامه ها به طور پیش فرض در حافظه داخلی ذخیره می شوند. با این حال، اگر اندازه APK شما بسیار بزرگ است، می‌توانید ترجیحی را در فایل مانیفست برنامه خود برای نصب برنامه خود در حافظه خارجی نشان دهید:

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

مجوزها و دسترسی به حافظه خارجی

Android مجوزهای مرتبط با فضای ذخیره سازی زیر را تعریف می کند: READ_EXTERNAL_STORAGE ، WRITE_EXTERNAL_STORAGE ، و MANAGE_EXTERNAL_STORAGE .

در نسخه‌های قبلی Android، برنامه‌ها باید مجوز READ_EXTERNAL_STORAGE را برای دسترسی به هر فایلی خارج از دایرکتوری‌های خاص برنامه در حافظه خارجی اعلام کنند. همچنین، برنامه‌ها باید مجوز WRITE_EXTERNAL_STORAGE را برای نوشتن در هر فایلی خارج از فهرست برنامه خاص اعلام کنند.

نسخه‌های جدیدتر Android برای تعیین توانایی برنامه برای دسترسی و نوشتن به فایل معین، بیشتر به هدف فایل متکی هستند تا مکان آن. به ویژه، اگر برنامه شما Android 11 (سطح API 30) یا بالاتر را هدف قرار می‌دهد، مجوز WRITE_EXTERNAL_STORAGE هیچ تأثیری بر دسترسی برنامه شما به فضای ذخیره‌سازی ندارد. این مدل ذخیره‌سازی مبتنی بر هدف، حریم خصوصی کاربر را بهبود می‌بخشد زیرا برنامه‌ها فقط به قسمت‌هایی از سیستم فایل دستگاه دسترسی دارند که واقعاً استفاده می‌کنند.

Android 11 مجوز MANAGE_EXTERNAL_STORAGE را معرفی می‌کند که دسترسی نوشتن به فایل‌های خارج از فهرست راهنمای خاص برنامه و MediaStore را فراهم می‌کند. برای کسب اطلاعات بیشتر در مورد این مجوز، و اینکه چرا اکثر برنامه‌ها برای انجام موارد استفاده خود نیازی به اعلام آن ندارند، به راهنمای نحوه مدیریت همه فایل‌ها در دستگاه ذخیره‌سازی مراجعه کنید.

فضای ذخیره سازی محدوده

برای اینکه کاربران کنترل بیشتری روی فایل‌هایشان داشته باشند و به هم ریختگی فایل‌ها محدود شود، برنامه‌هایی که Android 10 (سطح API 29) و بالاتر را هدف قرار می‌دهند، به‌طور پیش‌فرض به فضای ذخیره‌سازی خارجی یا فضای ذخیره‌سازی محدوده دسترسی دارند. چنین برنامه‌هایی فقط به دایرکتوری مخصوص برنامه در حافظه خارجی و همچنین انواع خاصی از رسانه‌هایی که برنامه ایجاد کرده است دسترسی دارند.

از فضای ذخیره‌سازی با دامنه استفاده کنید، مگر اینکه برنامه شما نیاز به دسترسی به فایلی داشته باشد که خارج از فهرستی مخصوص برنامه و خارج از فهرستی که APIهای MediaStore می‌توانند به آن دسترسی داشته باشند، ذخیره شده است. اگر فایل‌های مخصوص برنامه را در حافظه خارجی ذخیره می‌کنید، می‌توانید با قرار دادن این فایل‌ها در فهرستی مخصوص برنامه در حافظه خارجی، استفاده از فضای ذخیره‌سازی با دامنه را آسان‌تر کنید. به این ترتیب، برنامه شما دسترسی به این فایل‌ها را زمانی که فضای ذخیره‌سازی محدوده فعال است حفظ می‌کند.

برای آماده سازی برنامه خود برای فضای ذخیره سازی محدوده، موارد استفاده از فضای ذخیره سازی و راهنمای بهترین شیوه ها را مشاهده کنید. اگر برنامه شما مورد استفاده دیگری دارد که تحت پوشش فضای ذخیره‌سازی نیست، یک درخواست ویژگی ارسال کنید . می‌توانید به‌طور موقت از استفاده از فضای ذخیره‌سازی دامنه‌دار انصراف دهید .

مشاهده فایل ها در دستگاه

برای مشاهده فایل‌های ذخیره شده در دستگاه، از Android Studio's Device File Explorer استفاده کنید.

منابع اضافی

برای اطلاعات بیشتر در مورد ذخیره سازی داده ها، به منابع زیر مراجعه کنید.

ویدیوها

،

اندروید از سیستم فایلی مشابه سیستم فایل مبتنی بر دیسک در سایر پلتفرم ها استفاده می کند. این سیستم چندین گزینه را برای شما فراهم می کند تا داده های برنامه خود را ذخیره کنید:

  • فضای ذخیره‌سازی ویژه برنامه: فایل‌هایی را که فقط برای استفاده برنامه شما در نظر گرفته شده‌اند، یا در فهرست‌های اختصاصی در یک حجم حافظه داخلی یا فهرست‌های اختصاصی متفاوت در حافظه خارجی ذخیره کنید. از دایرکتوری های موجود در حافظه داخلی برای ذخیره اطلاعات حساسی که سایر برنامه ها نباید به آنها دسترسی داشته باشند، استفاده کنید.
  • فضای ذخیره‌سازی مشترک: فایل‌هایی را ذخیره کنید که برنامه شما قصد دارد با سایر برنامه‌ها از جمله رسانه، اسناد و فایل‌های دیگر به اشتراک بگذارد.
  • ترجیحات: داده های خصوصی و اولیه را در جفت های کلید-مقدار ذخیره کنید.
  • پایگاه های داده: داده های ساخت یافته را در یک پایگاه داده خصوصی با استفاده از کتابخانه تداوم اتاق ذخیره کنید.

ویژگی های این گزینه ها در جدول زیر خلاصه شده است:

نوع محتوا روش دسترسی مجوزهای مورد نیاز آیا برنامه های دیگر می توانند دسترسی داشته باشند؟ فایل‌ها در حذف برنامه حذف شدند؟
فایل های مخصوص برنامه فایل‌هایی که فقط برای استفاده برنامه شما طراحی شده‌اند از حافظه داخلی، getFilesDir() یا getCacheDir()

از حافظه خارجی، getExternalFilesDir() یا getExternalCacheDir()
هرگز برای حافظه داخلی مورد نیاز نیست

هنگامی که برنامه شما در دستگاه‌های دارای Android نسخه 4.4 (سطح API 19) یا بالاتر استفاده می‌شود، برای ذخیره‌سازی خارجی مورد نیاز نیست.
خیر بله
رسانه ها فایل های رسانه ای قابل اشتراک گذاری (تصاویر، فایل های صوتی، فیلم ها) MediaStore API READ_EXTERNAL_STORAGE هنگام دسترسی به فایل‌های برنامه‌های دیگر در Android 11 (سطح API 30) یا بالاتر

READ_EXTERNAL_STORAGE یا WRITE_EXTERNAL_STORAGE هنگام دسترسی به فایل‌های برنامه‌های دیگر در Android 10 (سطح API 29)

مجوزها برای همه فایل‌های اندروید 9 (سطح API 28) یا پایین‌تر مورد نیاز است
بله، اگرچه برنامه دیگر به مجوز READ_EXTERNAL_STORAGE نیاز دارد خیر
اسناد و فایل های دیگر انواع دیگر محتوای قابل اشتراک گذاری، از جمله فایل های دانلود شده چارچوب دسترسی به فضای ذخیره سازی هیچ کدام بله، از طریق انتخابگر فایل سیستم خیر
تنظیمات برگزیده برنامه جفت های کلید-مقدار کتابخانه تنظیمات Jetpack هیچ کدام خیر بله
پایگاه داده داده های ساخت یافته کتابخانه ماندگاری اتاق هیچ کدام خیر بله

راه حلی که انتخاب می کنید به نیازهای خاص شما بستگی دارد:

اطلاعات شما به چه مقدار فضا نیاز دارد؟
حافظه داخلی فضای محدودی برای داده های خاص برنامه دارد. در صورت نیاز به ذخیره مقدار قابل توجهی داده، از انواع دیگر ذخیره سازی استفاده کنید.
دسترسی به داده ها چقدر باید قابل اعتماد باشد؟
اگر عملکرد اصلی برنامه شما به داده های خاصی نیاز دارد، مانند زمانی که برنامه شما در حال راه اندازی است، داده ها را در فهرست حافظه داخلی یا یک پایگاه داده قرار دهید. فایل‌های مخصوص برنامه‌ای که در حافظه خارجی ذخیره می‌شوند همیشه قابل دسترسی نیستند زیرا برخی از دستگاه‌ها به کاربران اجازه می‌دهند دستگاه فیزیکی مربوط به حافظه خارجی را حذف کنند.
چه نوع داده هایی برای ذخیره سازی نیاز دارید؟
اگر داده‌هایی دارید که فقط برای برنامه شما معنادار است، از فضای ذخیره‌سازی مخصوص برنامه استفاده کنید. برای محتوای رسانه ای قابل اشتراک گذاری، از فضای ذخیره سازی مشترک استفاده کنید تا سایر برنامه ها بتوانند به محتوا دسترسی داشته باشند. برای داده های ساختاریافته، از ترجیحات (برای داده های کلید-مقدار) یا پایگاه داده (برای داده هایی که بیش از 2 ستون دارند) استفاده کنید.
آیا داده ها باید برای برنامه شما خصوصی باشند؟
هنگام ذخیره داده های حساس -داده هایی که نباید از هیچ برنامه دیگری قابل دسترسی باشند- از حافظه داخلی، تنظیمات برگزیده یا پایگاه داده استفاده کنید. فضای ذخیره‌سازی داخلی مزیت بیشتری دارد که داده‌ها از دید کاربران پنهان می‌شوند.

دسته بندی مکان های ذخیره سازی

Android دو نوع مکان ذخیره سازی فیزیکی را ارائه می دهد: حافظه داخلی و حافظه خارجی . در اکثر دستگاه ها، حافظه داخلی کوچکتر از حافظه خارجی است. با این حال، حافظه داخلی همیشه در همه دستگاه‌ها در دسترس است، و آن را به مکانی مطمئن‌تر برای قرار دادن داده‌هایی که برنامه شما به آن وابسته است تبدیل می‌کند.

حجم های قابل جابجایی، مانند کارت SD، در سیستم فایل به عنوان بخشی از حافظه خارجی ظاهر می شوند. Android این دستگاه ها را با استفاده از مسیری مانند /sdcard نشان می دهد.

خود برنامه ها به طور پیش فرض در حافظه داخلی ذخیره می شوند. با این حال، اگر اندازه APK شما بسیار بزرگ است، می‌توانید ترجیحی را در فایل مانیفست برنامه خود برای نصب برنامه خود در حافظه خارجی نشان دهید:

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

مجوزها و دسترسی به حافظه خارجی

Android مجوزهای مرتبط با فضای ذخیره سازی زیر را تعریف می کند: READ_EXTERNAL_STORAGE ، WRITE_EXTERNAL_STORAGE ، و MANAGE_EXTERNAL_STORAGE .

در نسخه‌های قبلی Android، برنامه‌ها باید مجوز READ_EXTERNAL_STORAGE را برای دسترسی به هر فایلی خارج از دایرکتوری‌های خاص برنامه در حافظه خارجی اعلام کنند. همچنین، برنامه‌ها باید مجوز WRITE_EXTERNAL_STORAGE را برای نوشتن در هر فایلی خارج از فهرست برنامه خاص اعلام کنند.

نسخه‌های جدیدتر Android برای تعیین توانایی برنامه برای دسترسی و نوشتن به فایل معین، بیشتر به هدف فایل متکی هستند تا مکان آن. به ویژه، اگر برنامه شما Android 11 (سطح API 30) یا بالاتر را هدف قرار می‌دهد، مجوز WRITE_EXTERNAL_STORAGE هیچ تأثیری بر دسترسی برنامه شما به فضای ذخیره‌سازی ندارد. این مدل ذخیره‌سازی مبتنی بر هدف، حریم خصوصی کاربر را بهبود می‌بخشد زیرا برنامه‌ها فقط به قسمت‌هایی از سیستم فایل دستگاه دسترسی دارند که واقعاً استفاده می‌کنند.

Android 11 مجوز MANAGE_EXTERNAL_STORAGE را معرفی می‌کند که دسترسی نوشتن به فایل‌های خارج از فهرست راهنمای خاص برنامه و MediaStore را فراهم می‌کند. برای کسب اطلاعات بیشتر در مورد این مجوز، و اینکه چرا اکثر برنامه‌ها برای انجام موارد استفاده خود نیازی به اعلام آن ندارند، به راهنمای نحوه مدیریت همه فایل‌ها در دستگاه ذخیره‌سازی مراجعه کنید.

فضای ذخیره سازی محدوده

برای اینکه کاربران کنترل بیشتری روی فایل‌هایشان داشته باشند و به هم ریختگی فایل‌ها محدود شود، برنامه‌هایی که Android 10 (سطح API 29) و بالاتر را هدف قرار می‌دهند، به‌طور پیش‌فرض به فضای ذخیره‌سازی خارجی یا فضای ذخیره‌سازی محدوده دسترسی دارند. چنین برنامه‌هایی فقط به دایرکتوری مخصوص برنامه در حافظه خارجی و همچنین انواع خاصی از رسانه‌هایی که برنامه ایجاد کرده است دسترسی دارند.

از فضای ذخیره‌سازی با دامنه استفاده کنید، مگر اینکه برنامه شما نیاز به دسترسی به فایلی داشته باشد که خارج از فهرستی مخصوص برنامه و خارج از فهرستی که APIهای MediaStore می‌توانند به آن دسترسی داشته باشند، ذخیره شده است. اگر فایل‌های مخصوص برنامه را در حافظه خارجی ذخیره می‌کنید، می‌توانید با قرار دادن این فایل‌ها در فهرستی مخصوص برنامه در حافظه خارجی، استفاده از فضای ذخیره‌سازی با دامنه را آسان‌تر کنید. به این ترتیب، برنامه شما دسترسی به این فایل‌ها را زمانی که فضای ذخیره‌سازی محدوده فعال است حفظ می‌کند.

برای آماده سازی برنامه خود برای فضای ذخیره سازی محدوده، موارد استفاده از فضای ذخیره سازی و راهنمای بهترین شیوه ها را مشاهده کنید. اگر برنامه شما مورد استفاده دیگری دارد که تحت پوشش فضای ذخیره‌سازی نیست، یک درخواست ویژگی ارسال کنید . می‌توانید به‌طور موقت از استفاده از فضای ذخیره‌سازی دامنه‌دار انصراف دهید .

مشاهده فایل ها در دستگاه

برای مشاهده فایل‌های ذخیره شده در دستگاه، از Android Studio's Device File Explorer استفاده کنید.

منابع اضافی

برای اطلاعات بیشتر در مورد ذخیره سازی داده ها، به منابع زیر مراجعه کنید.

ویدیوها

،

اندروید از سیستم فایلی مشابه سیستم فایل مبتنی بر دیسک در سایر پلتفرم ها استفاده می کند. این سیستم چندین گزینه را برای شما فراهم می کند تا داده های برنامه خود را ذخیره کنید:

  • فضای ذخیره‌سازی ویژه برنامه: فایل‌هایی را که فقط برای استفاده برنامه شما در نظر گرفته شده‌اند، یا در فهرست‌های اختصاصی در یک حجم حافظه داخلی یا فهرست‌های اختصاصی متفاوت در حافظه خارجی ذخیره کنید. از دایرکتوری های موجود در حافظه داخلی برای ذخیره اطلاعات حساسی که سایر برنامه ها نباید به آنها دسترسی داشته باشند، استفاده کنید.
  • فضای ذخیره‌سازی مشترک: فایل‌هایی را ذخیره کنید که برنامه شما قصد دارد با سایر برنامه‌ها از جمله رسانه، اسناد و فایل‌های دیگر به اشتراک بگذارد.
  • ترجیحات: داده های خصوصی و اولیه را در جفت های کلید-مقدار ذخیره کنید.
  • پایگاه های داده: داده های ساخت یافته را در یک پایگاه داده خصوصی با استفاده از کتابخانه تداوم اتاق ذخیره کنید.

ویژگی های این گزینه ها در جدول زیر خلاصه شده است:

نوع محتوا روش دسترسی مجوزهای مورد نیاز آیا برنامه های دیگر می توانند دسترسی داشته باشند؟ فایل‌ها در حذف نصب برنامه حذف شدند؟
فایل های مخصوص برنامه فایل‌هایی که فقط برای استفاده برنامه شما طراحی شده‌اند از حافظه داخلی، getFilesDir() یا getCacheDir()

از حافظه خارجی، getExternalFilesDir() یا getExternalCacheDir()
هرگز برای حافظه داخلی مورد نیاز نیست

هنگامی که برنامه شما در دستگاه‌های دارای Android نسخه 4.4 (سطح API 19) یا بالاتر استفاده می‌شود، برای ذخیره‌سازی خارجی مورد نیاز نیست.
خیر بله
رسانه ها فایل های رسانه ای قابل اشتراک گذاری (تصاویر، فایل های صوتی، فیلم ها) MediaStore API READ_EXTERNAL_STORAGE هنگام دسترسی به فایل‌های برنامه‌های دیگر در Android 11 (سطح API 30) یا بالاتر

READ_EXTERNAL_STORAGE یا WRITE_EXTERNAL_STORAGE هنگام دسترسی به فایل‌های برنامه‌های دیگر در Android 10 (سطح API 29)

مجوزها برای همه فایل‌های اندروید 9 (سطح API 28) یا پایین‌تر مورد نیاز است
بله، اگرچه برنامه دیگر به مجوز READ_EXTERNAL_STORAGE نیاز دارد خیر
اسناد و فایل های دیگر انواع دیگر محتوای قابل اشتراک گذاری، از جمله فایل های دانلود شده چارچوب دسترسی به فضای ذخیره سازی هیچ کدام بله، از طریق انتخابگر فایل سیستم خیر
تنظیمات برگزیده برنامه جفت های کلید-مقدار کتابخانه تنظیمات Jetpack هیچ کدام خیر بله
پایگاه داده داده های ساخت یافته کتابخانه ماندگاری اتاق هیچ کدام خیر بله

راه حلی که انتخاب می کنید به نیازهای خاص شما بستگی دارد:

اطلاعات شما به چه مقدار فضا نیاز دارد؟
حافظه داخلی فضای محدودی برای داده های خاص برنامه دارد. در صورت نیاز به ذخیره مقدار قابل توجهی داده، از انواع دیگر ذخیره سازی استفاده کنید.
دسترسی به داده ها چقدر باید قابل اعتماد باشد؟
اگر عملکرد اصلی برنامه شما به داده های خاصی نیاز دارد، مانند زمانی که برنامه شما در حال راه اندازی است، داده ها را در فهرست حافظه داخلی یا یک پایگاه داده قرار دهید. فایل‌های مخصوص برنامه‌ای که در حافظه خارجی ذخیره می‌شوند همیشه قابل دسترسی نیستند زیرا برخی از دستگاه‌ها به کاربران اجازه می‌دهند دستگاه فیزیکی مربوط به حافظه خارجی را حذف کنند.
چه نوع داده هایی برای ذخیره سازی نیاز دارید؟
اگر داده‌هایی دارید که فقط برای برنامه شما معنادار است، از فضای ذخیره‌سازی مخصوص برنامه استفاده کنید. برای محتوای رسانه ای قابل اشتراک گذاری، از فضای ذخیره سازی مشترک استفاده کنید تا سایر برنامه ها بتوانند به محتوا دسترسی داشته باشند. برای داده های ساختاریافته، از ترجیحات (برای داده های کلید-مقدار) یا پایگاه داده (برای داده هایی که بیش از 2 ستون دارند) استفاده کنید.
آیا داده ها باید برای برنامه شما خصوصی باشند؟
هنگام ذخیره داده های حساس -داده هایی که نباید از هیچ برنامه دیگری قابل دسترسی باشند- از حافظه داخلی، تنظیمات برگزیده یا پایگاه داده استفاده کنید. فضای ذخیره‌سازی داخلی مزیت بیشتری دارد که داده‌ها از دید کاربران پنهان می‌شوند.

دسته بندی مکان های ذخیره سازی

Android دو نوع مکان ذخیره سازی فیزیکی را ارائه می دهد: حافظه داخلی و حافظه خارجی . در اکثر دستگاه ها، حافظه داخلی کوچکتر از حافظه خارجی است. با این حال، حافظه داخلی همیشه در همه دستگاه‌ها در دسترس است، و آن را به مکانی مطمئن‌تر برای قرار دادن داده‌هایی که برنامه شما به آن وابسته است تبدیل می‌کند.

حجم های قابل جابجایی، مانند کارت SD، در سیستم فایل به عنوان بخشی از حافظه خارجی ظاهر می شوند. Android این دستگاه ها را با استفاده از مسیری مانند /sdcard نشان می دهد.

خود برنامه ها به طور پیش فرض در حافظه داخلی ذخیره می شوند. با این حال، اگر اندازه APK شما بسیار بزرگ است، می‌توانید ترجیحی را در فایل مانیفست برنامه خود برای نصب برنامه خود در حافظه خارجی نشان دهید:

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

مجوزها و دسترسی به حافظه خارجی

Android مجوزهای مرتبط با فضای ذخیره سازی زیر را تعریف می کند: READ_EXTERNAL_STORAGE ، WRITE_EXTERNAL_STORAGE ، و MANAGE_EXTERNAL_STORAGE .

در نسخه‌های قبلی Android، برنامه‌ها باید مجوز READ_EXTERNAL_STORAGE را برای دسترسی به هر فایلی خارج از دایرکتوری‌های خاص برنامه در حافظه خارجی اعلام کنند. همچنین، برنامه‌ها باید مجوز WRITE_EXTERNAL_STORAGE را برای نوشتن در هر فایلی خارج از فهرست برنامه خاص اعلام کنند.

نسخه‌های جدیدتر Android برای تعیین توانایی برنامه برای دسترسی و نوشتن به فایل معین، بیشتر به هدف فایل متکی هستند تا مکان آن. به ویژه، اگر برنامه شما Android 11 (سطح API 30) یا بالاتر را هدف قرار می‌دهد، مجوز WRITE_EXTERNAL_STORAGE هیچ تأثیری بر دسترسی برنامه شما به فضای ذخیره‌سازی ندارد. این مدل ذخیره‌سازی مبتنی بر هدف، حریم خصوصی کاربر را بهبود می‌بخشد زیرا برنامه‌ها فقط به قسمت‌هایی از سیستم فایل دستگاه دسترسی دارند که واقعاً استفاده می‌کنند.

Android 11 مجوز MANAGE_EXTERNAL_STORAGE را معرفی می‌کند که دسترسی نوشتن به فایل‌های خارج از فهرست راهنمای خاص برنامه و MediaStore را فراهم می‌کند. برای کسب اطلاعات بیشتر در مورد این مجوز، و اینکه چرا اکثر برنامه‌ها برای انجام موارد استفاده خود نیازی به اعلام آن ندارند، به راهنمای نحوه مدیریت همه فایل‌ها در دستگاه ذخیره‌سازی مراجعه کنید.

فضای ذخیره سازی محدوده

برای اینکه کاربران کنترل بیشتری روی فایل‌هایشان داشته باشند و به هم ریختگی فایل‌ها محدود شود، برنامه‌هایی که Android 10 (سطح API 29) و بالاتر را هدف قرار می‌دهند، به‌طور پیش‌فرض به فضای ذخیره‌سازی خارجی یا فضای ذخیره‌سازی محدوده دسترسی دارند. چنین برنامه‌هایی فقط به دایرکتوری مخصوص برنامه در حافظه خارجی و همچنین انواع خاصی از رسانه‌هایی که برنامه ایجاد کرده است دسترسی دارند.

از فضای ذخیره‌سازی با دامنه استفاده کنید، مگر اینکه برنامه شما نیاز به دسترسی به فایلی داشته باشد که خارج از فهرستی مخصوص برنامه و خارج از فهرستی که APIهای MediaStore می‌توانند به آن دسترسی داشته باشند، ذخیره شده است. اگر فایل‌های مخصوص برنامه را در حافظه خارجی ذخیره می‌کنید، می‌توانید با قرار دادن این فایل‌ها در فهرستی مخصوص برنامه در حافظه خارجی، استفاده از فضای ذخیره‌سازی با دامنه را آسان‌تر کنید. به این ترتیب، برنامه شما دسترسی به این فایل‌ها را زمانی که فضای ذخیره‌سازی محدوده فعال است حفظ می‌کند.

برای آماده سازی برنامه خود برای فضای ذخیره سازی محدوده، موارد استفاده از فضای ذخیره سازی و راهنمای بهترین شیوه ها را مشاهده کنید. اگر برنامه شما مورد استفاده دیگری دارد که تحت پوشش فضای ذخیره‌سازی نیست، یک درخواست ویژگی ارسال کنید . می‌توانید به‌طور موقت از استفاده از فضای ذخیره‌سازی دامنه‌دار انصراف دهید .

مشاهده فایل ها در دستگاه

برای مشاهده فایل‌های ذخیره شده در دستگاه، از Android Studio's Device File Explorer استفاده کنید.

منابع اضافی

برای اطلاعات بیشتر در مورد ذخیره سازی داده ها، به منابع زیر مراجعه کنید.

ویدیوها

،

اندروید از سیستم فایلی مشابه سیستم فایل مبتنی بر دیسک در سایر پلتفرم ها استفاده می کند. این سیستم چندین گزینه را برای شما فراهم می کند تا داده های برنامه خود را ذخیره کنید:

  • فضای ذخیره‌سازی ویژه برنامه: فایل‌هایی را که فقط برای استفاده برنامه شما در نظر گرفته شده‌اند، یا در فهرست‌های اختصاصی در یک حجم حافظه داخلی یا فهرست‌های اختصاصی متفاوت در حافظه خارجی ذخیره کنید. از دایرکتوری های موجود در حافظه داخلی برای ذخیره اطلاعات حساسی که سایر برنامه ها نباید به آنها دسترسی داشته باشند، استفاده کنید.
  • فضای ذخیره‌سازی مشترک: فایل‌هایی را ذخیره کنید که برنامه شما قصد دارد با سایر برنامه‌ها از جمله رسانه، اسناد و فایل‌های دیگر به اشتراک بگذارد.
  • ترجیحات: داده های خصوصی و اولیه را در جفت های کلید-مقدار ذخیره کنید.
  • پایگاه های داده: داده های ساخت یافته را در یک پایگاه داده خصوصی با استفاده از کتابخانه تداوم اتاق ذخیره کنید.

ویژگی های این گزینه ها در جدول زیر خلاصه شده است:

نوع محتوا روش دسترسی مجوزهای مورد نیاز آیا برنامه های دیگر می توانند دسترسی داشته باشند؟ فایل‌ها در حذف نصب برنامه حذف شدند؟
فایل های مخصوص برنامه فایل‌هایی که فقط برای استفاده برنامه شما طراحی شده‌اند از حافظه داخلی، getFilesDir() یا getCacheDir()

از حافظه خارجی، getExternalFilesDir() یا getExternalCacheDir()
هرگز برای حافظه داخلی مورد نیاز نیست

هنگامی که برنامه شما در دستگاه‌های دارای Android نسخه 4.4 (سطح API 19) یا بالاتر استفاده می‌شود، برای ذخیره‌سازی خارجی مورد نیاز نیست.
خیر بله
رسانه ها فایل های رسانه ای قابل اشتراک گذاری (تصاویر، فایل های صوتی، فیلم ها) MediaStore API READ_EXTERNAL_STORAGE هنگام دسترسی به فایل‌های برنامه‌های دیگر در Android 11 (سطح API 30) یا بالاتر

READ_EXTERNAL_STORAGE یا WRITE_EXTERNAL_STORAGE هنگام دسترسی به فایل‌های برنامه‌های دیگر در Android 10 (سطح API 29)

مجوزها برای همه فایل‌های اندروید 9 (سطح API 28) یا پایین‌تر مورد نیاز است
بله، اگرچه برنامه دیگر به مجوز READ_EXTERNAL_STORAGE نیاز دارد خیر
اسناد و فایل های دیگر انواع دیگر محتوای قابل اشتراک گذاری، از جمله فایل های دانلود شده چارچوب دسترسی به فضای ذخیره سازی هیچ کدام بله، از طریق انتخابگر فایل سیستم خیر
تنظیمات برگزیده برنامه جفت های کلید-مقدار کتابخانه تنظیمات Jetpack هیچ کدام خیر بله
پایگاه داده داده های ساخت یافته کتابخانه ماندگاری اتاق هیچ کدام خیر بله

راه حلی که انتخاب می کنید به نیازهای خاص شما بستگی دارد:

اطلاعات شما به چه مقدار فضا نیاز دارد؟
حافظه داخلی فضای محدودی برای داده های خاص برنامه دارد. در صورت نیاز به ذخیره مقدار قابل توجهی داده، از انواع دیگر ذخیره سازی استفاده کنید.
دسترسی به داده ها چقدر باید قابل اعتماد باشد؟
اگر عملکرد اصلی برنامه شما به داده های خاصی نیاز دارد، مانند زمانی که برنامه شما در حال راه اندازی است، داده ها را در فهرست حافظه داخلی یا یک پایگاه داده قرار دهید. فایل‌های مخصوص برنامه‌ای که در حافظه خارجی ذخیره می‌شوند همیشه قابل دسترسی نیستند زیرا برخی از دستگاه‌ها به کاربران اجازه می‌دهند دستگاه فیزیکی مربوط به حافظه خارجی را حذف کنند.
چه نوع داده هایی برای ذخیره سازی نیاز دارید؟
اگر داده‌هایی دارید که فقط برای برنامه شما معنادار است، از فضای ذخیره‌سازی مخصوص برنامه استفاده کنید. برای محتوای رسانه ای قابل اشتراک گذاری، از فضای ذخیره سازی مشترک استفاده کنید تا سایر برنامه ها بتوانند به محتوا دسترسی داشته باشند. برای داده های ساختاریافته، از ترجیحات (برای داده های کلید-مقدار) یا پایگاه داده (برای داده هایی که بیش از 2 ستون دارند) استفاده کنید.
آیا داده ها باید برای برنامه شما خصوصی باشند؟
هنگام ذخیره داده های حساس -داده هایی که نباید از هیچ برنامه دیگری قابل دسترسی باشند- از حافظه داخلی، تنظیمات برگزیده یا پایگاه داده استفاده کنید. فضای ذخیره‌سازی داخلی مزیت بیشتری دارد که داده‌ها از دید کاربران پنهان می‌شوند.

دسته بندی مکان های ذخیره سازی

Android دو نوع مکان ذخیره سازی فیزیکی را ارائه می دهد: حافظه داخلی و حافظه خارجی . در اکثر دستگاه ها، حافظه داخلی کوچکتر از حافظه خارجی است. با این حال، حافظه داخلی همیشه در همه دستگاه‌ها در دسترس است، و آن را به مکانی مطمئن‌تر برای قرار دادن داده‌هایی که برنامه شما به آن وابسته است تبدیل می‌کند.

حجم های قابل جابجایی، مانند کارت SD، در سیستم فایل به عنوان بخشی از حافظه خارجی ظاهر می شوند. Android این دستگاه ها را با استفاده از مسیری مانند /sdcard نشان می دهد.

خود برنامه ها به طور پیش فرض در حافظه داخلی ذخیره می شوند. با این حال، اگر اندازه APK شما بسیار بزرگ است، می‌توانید ترجیحی را در فایل مانیفست برنامه خود برای نصب برنامه خود در حافظه خارجی نشان دهید:

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

مجوزها و دسترسی به حافظه خارجی

Android مجوزهای مرتبط با فضای ذخیره سازی زیر را تعریف می کند: READ_EXTERNAL_STORAGE ، WRITE_EXTERNAL_STORAGE ، و MANAGE_EXTERNAL_STORAGE .

در نسخه‌های قبلی Android، برنامه‌ها باید مجوز READ_EXTERNAL_STORAGE را برای دسترسی به هر فایلی خارج از دایرکتوری‌های خاص برنامه در حافظه خارجی اعلام کنند. همچنین، برنامه‌ها باید مجوز WRITE_EXTERNAL_STORAGE را برای نوشتن در هر فایلی خارج از فهرست برنامه خاص اعلام کنند.

نسخه‌های جدیدتر Android برای تعیین توانایی برنامه برای دسترسی و نوشتن به فایل معین، بیشتر به هدف فایل متکی هستند تا مکان آن. به ویژه، اگر برنامه شما Android 11 (سطح API 30) یا بالاتر را هدف قرار می‌دهد، مجوز WRITE_EXTERNAL_STORAGE هیچ تأثیری بر دسترسی برنامه شما به فضای ذخیره‌سازی ندارد. این مدل ذخیره‌سازی مبتنی بر هدف، حریم خصوصی کاربر را بهبود می‌بخشد زیرا برنامه‌ها فقط به قسمت‌هایی از سیستم فایل دستگاه دسترسی دارند که واقعاً استفاده می‌کنند.

Android 11 مجوز MANAGE_EXTERNAL_STORAGE را معرفی می‌کند که دسترسی نوشتن به فایل‌های خارج از فهرست راهنمای خاص برنامه و MediaStore را فراهم می‌کند. برای کسب اطلاعات بیشتر در مورد این مجوز، و اینکه چرا اکثر برنامه‌ها برای انجام موارد استفاده خود نیازی به اعلام آن ندارند، به راهنمای نحوه مدیریت همه فایل‌ها در دستگاه ذخیره‌سازی مراجعه کنید.

فضای ذخیره سازی محدوده

برای اینکه کاربران کنترل بیشتری روی فایل‌هایشان داشته باشند و به هم ریختگی فایل‌ها محدود شود، برنامه‌هایی که Android 10 (سطح API 29) و بالاتر را هدف قرار می‌دهند، به‌طور پیش‌فرض به فضای ذخیره‌سازی خارجی یا فضای ذخیره‌سازی محدوده دسترسی دارند. چنین برنامه‌هایی فقط به دایرکتوری مخصوص برنامه در حافظه خارجی و همچنین انواع خاصی از رسانه‌هایی که برنامه ایجاد کرده است دسترسی دارند.

از فضای ذخیره‌سازی با دامنه استفاده کنید، مگر اینکه برنامه شما نیاز به دسترسی به فایلی داشته باشد که خارج از فهرستی مخصوص برنامه و خارج از فهرستی که APIهای MediaStore می‌توانند به آن دسترسی داشته باشند، ذخیره شده است. اگر فایل‌های مخصوص برنامه را در حافظه خارجی ذخیره می‌کنید، می‌توانید با قرار دادن این فایل‌ها در فهرستی مخصوص برنامه در حافظه خارجی، استفاده از فضای ذخیره‌سازی با دامنه را آسان‌تر کنید. به این ترتیب، برنامه شما دسترسی به این فایل‌ها را زمانی که فضای ذخیره‌سازی محدوده فعال است حفظ می‌کند.

برای آماده سازی برنامه خود برای فضای ذخیره سازی محدوده، موارد استفاده از فضای ذخیره سازی و راهنمای بهترین شیوه ها را مشاهده کنید. اگر برنامه شما مورد استفاده دیگری دارد که تحت پوشش فضای ذخیره‌سازی نیست، یک درخواست ویژگی ارسال کنید . می‌توانید به‌طور موقت از استفاده از فضای ذخیره‌سازی دامنه‌دار انصراف دهید .

مشاهده فایل ها در دستگاه

برای مشاهده فایل‌های ذخیره شده در دستگاه، از Android Studio's Device File Explorer استفاده کنید.

منابع اضافی

برای اطلاعات بیشتر در مورد ذخیره سازی داده ها، به منابع زیر مراجعه کنید.

ویدیوها