ডেটা ও ফাইল স্টোরেজের ওভারভিউ

Android এমন একটি ফাইল সিস্টেম ব্যবহার করে যা অন্যান্য প্ল্যাটফর্মে ডিস্ক-ভিত্তিক ফাইল সিস্টেমের মতো। আপনার অ্যাপ ডেটা সেভ করার জন্য সিস্টেম আপনাকে একাধিক বিকল্প প্রদান করে:

  • অ্যাপ-নির্দিষ্ট স্টোরেজ: শুধুমাত্র আপনার অ্যাপের ব্যবহারের জন্য ফাইল স্টোর করুন, ইন্টার্নাল স্টোরেজ ভলিউমের মধ্যে নির্দিষ্ট ডিরেক্টরিতে অথবা এক্সটার্নাল স্টোরেজের মধ্যে বিভিন্ন নির্দিষ্ট ডিরেক্টরিতে। অন্যান্য অ্যাপ যাতে অ্যাক্সেস করতে না পারে সেই জন্য সংবেদনশীল তথ্য সেভ করতে ইন্টার্নাল স্টোরেজের মধ্যে ডিরেক্টরি ব্যবহার করুন।
  • শেয়ার করা স্টোরেজ: আপনার অ্যাপ অন্যান্য অ্যাপের সাথে শেয়ার করতে চায় এমন ফাইল স্টোর করুন, এর মধ্যে মিডিয়া, ডকুমেন্ট ও অন্যান্য ফাইল অন্তর্ভুক্ত।
  • পছন্দ: কী-ভ্যালু পেয়ারে ব্যক্তিগত, আদিম ডেটা স্টোর করুন।
  • ডেটাবেস: রুম পারসিসটেন্স লাইব্রেরি ব্যবহার করে ব্যক্তিগত ডেটাবেসে স্ট্রাকচার্ড ডেটা স্টোর করুন।

এইসব বিকল্পের বৈশিষ্ট্য নিম্নলিখিত সারণীতে সংক্ষিপ্তভাবে তুলে ধরা হয়েছে:

কন্টেন্টের ধরন অ্যাক্সেসের পদ্ধতি অনুমতি প্রয়োজন অন্যান্য অ্যাপ কি অ্যাক্সেস করতে পারবে? অ্যাপ আনইনস্টল করার সময় ফাইল সরিয়ে দেওয়া হয়েছে?
অ্যাপ-নির্দিষ্ট ফাইল শুধুমাত্র আপনার অ্যাপের ব্যবহারের জন্য ফাইল ইন্টার্নাল স্টোরেজ থেকে, getFilesDir() অথবা getCacheDir()

এক্সটার্নাল স্টোরেজ থেকে, getExternalFilesDir() অথবা getExternalCacheDir()
ইন্টার্নাল স্টোরেজের জন্য কখনও প্রয়োজন হয় না

Android 4.4 (API লেভেল 19) বা তার পরবর্তী যেকোনও ভার্সনে রান করা ডিভাইসে আপনার অ্যাপ ব্যবহার করা হলে এক্সটার্নাল স্টোরেজের জন্য প্রয়োজন হয় না
না হ্যাঁ
মিডিয়া শেয়ার করা যায় এমন মিডিয়া ফাইল (ছবি, অডিও ফাইল, ভিডিও) MediaStore API READ_EXTERNAL_STORAGE Android 11 (API লেভেল ৩০) বা তার পরবর্তী যেকোনও ভার্সনে অন্য অ্যাপের ফাইল অ্যাক্সেস করার সময়

READ_EXTERNAL_STORAGE অথবা WRITE_EXTERNAL_STORAGE Android ১০ (API লেভেল ২৯) ভার্সনে অন্য অ্যাপের ফাইল অ্যাক্সেস করার সময়

Android ৯ (API লেভেল ২৮) বা তার পূর্ববর্তী যেকোনও ভার্সনে সব ফাইলের জন্য অনুমতি প্রয়োজন
হ্যাঁ, তবে অন্য অ্যাপের READ_EXTERNAL_STORAGE অনুমতি প্রয়োজন না
ডকুমেন্ট ও অন্যান্য ফাইল ডাউনলোড করা ফাইল সহ অন্যান্য ধরনের শেয়ার করার মতো কন্টেন্ট Storage Access Framework কোনওটিই নয় হ্যাঁ, সিস্টেম ফাইল পিকারের মাধ্যমে না
অ্যাপ পছন্দ কী-ভ্যালুর পেয়ার Jetpack Preferences লাইব্রেরি কোনওটিই নয় না হ্যাঁ
স্থানীয় ডেটাবেস অন-ডিভাইস স্ট্রাকচার্ড রিলেশনাল ডেটা রুম পারসিসটেন্স লাইব্রেরি ১ কোনওটিই নয় না হ্যাঁ
ক্লাউড-হোস্টেড ডেটাবেস মাল্টি-ডিভাইস সিঙ্ক করা ডেটা, রিয়েল-টাইম কোলাবরেশন Cloud Firestore, Firebase SQL Connect INTERNET শুধুমাত্র ক্লাউড ব্যাকএন্ড ব্যবহার করা হচ্ছে SDK ক্যাশে মুছে ফেলা হয়েছে, কিন্তু ক্লাউড ডেটা থেকে গেছে
ক্লাউড-হোস্টেড অবজেক্ট স্টোরেজ আনস্ট্রাকচার্ড ডেটা (যেমন, মিডিয়া, বড় ফাইল বা ব্যাক-আপ) Firebase-এর জন্য ক্লাউড স্টোরেজ INTERNET শুধুমাত্র ক্লাউড ব্যাকএন্ড ব্যবহার করা হচ্ছে SDK ক্যাশে মুছে ফেলা হয়েছে, কিন্তু ক্লাউড ডেটা থেকে গেছে

১ বিভিন্ন ডিভাইস জুড়ে লোকাল রুম ডেটাবেস সিঙ্ক করতে, ক্লাউড ব্যাকএন্ডের সাথে রুম পেয়ার করুন অথবা Firebase-এর মতো ম্যানেজ করা সিঙ্ক সমাধানের কথা বিবেচনা করুন।

আপনার নির্দিষ্ট প্রয়োজনের উপর নির্ভর করে আপনি সমাধান বেছে নেন:

আপনার ডেটার জন্য কতটা জায়গা প্রয়োজন?
অ্যাপ-নির্দিষ্ট ডেটার জন্য ইন্টার্নাল স্টোরেজে সীমিত জায়গা আছে। আপনাকে যদি প্রচুর পরিমাণে ডেটা সেভ করতে হয়, তাহলে অন্য ধরনের স্টোরেজ ব্যবহার করুন।
ডেটা অ্যাক্সেস কতটা নির্ভরযোগ্য হতে হবে?
আপনার অ্যাপের প্রাথমিক কার্যকারিতার জন্য নির্দিষ্ট ডেটার প্রয়োজন হলে, যেমন আপনার অ্যাপ চালু হওয়ার সময়, ডেটা ইন্টার্নাল স্টোরেজ ডিরেক্টরি বা ডেটাবেসের মধ্যে রাখুন। এক্সটার্নাল স্টোরেজে সেভ করা অ্যাপ-নির্দিষ্ট ফাইল সবসময় অ্যাক্সেস করা যায় না কারণ কিছু ডিভাইস ব্যবহারকারীদের এক্সটার্নাল স্টোরেজের সাথে সম্পর্কিত ফিজিক্যাল ডিভাইস সরিয়ে দেওয়ার অনুমতি দেয়।
আপনাকে কোন ধরনের ডেটা স্টোর করতে হবে?
আপনার কাছে এমন ডেটা থাকলে যা শুধুমাত্র আপনার অ্যাপের জন্য অর্থপূর্ণ, অ্যাপ-নির্দিষ্ট স্টোরেজ ব্যবহার করুন। শেয়ার করা যায় এমন মিডিয়া কন্টেন্টের জন্য, শেয়ার করা স্টোরেজ ব্যবহার করুন যাতে অন্যান্য অ্যাপ কন্টেন্ট অ্যাক্সেস করতে পারে। স্ট্রাকচার্ড ডেটার জন্য, পছন্দ (কী-ভ্যালু ডেটার জন্য) অথবা ডেটাবেস (২টির বেশি কলাম আছে এমন ডেটার জন্য) ব্যবহার করুন।
ডেটা কি আপনার অ্যাপের জন্য ব্যক্তিগত হওয়া উচিত?
সংবেদনশীল ডেটা—যে ডেটা অন্য কোনও অ্যাপ থেকে অ্যাক্সেস করা উচিত নয়—স্টোর করার সময় ইন্টার্নাল স্টোরেজ, পছন্দ বা ডেটাবেস ব্যবহার করুন। ইন্টার্নাল স্টোরেজের অতিরিক্ত সুবিধা হল, ডেটা ব্যবহারকারীদের থেকে লুকানো থাকে।

স্টোরেজ লোকেশনের বিভাগ

Android দুই ধরনের ফিজিক্যাল স্টোরেজ লোকেশন প্রদান করে: ইন্টার্নাল স্টোরেজ এবং এক্সটার্নাল স্টোরেজ। বেশিরভাগ ডিভাইসে, ইন্টার্নাল স্টোরেজ এক্সটার্নাল স্টোরেজের চেয়ে ছোট হয়। তবে, ইন্টার্নাল স্টোরেজ সব ডিভাইসে সবসময় উপলভ্য থাকে, তাই আপনার অ্যাপ নির্ভর করে এমন ডেটা রাখার জন্য এটি আরও নির্ভরযোগ্য জায়গা।

এসডি কার্ডের মতো সরানো যায় এমন ভলিউম, এক্সটার্নাল স্টোরেজের অংশ হিসেবে ফাইল সিস্টেমে দেখা যায়। 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 লেভেল ২৯) এবং তার পরবর্তী ভার্সনকে টার্গেট করা অ্যাপগুলিকে সাধারণত এক্সটার্নাল স্টোরেজ বা স্কোপড স্টোরেজে স্কোপড অ্যাক্সেস দেওয়া হয়। এই ধরনের অ্যাপের কাছে শুধুমাত্র এক্সটার্নাল স্টোরেজে অ্যাপ-নির্দিষ্ট ডিরেক্টরি এবং অ্যাপের তৈরি করা নির্দিষ্ট ধরনের মিডিয়ার অ্যাক্সেস থাকে।

আপনার অ্যাপের যদি এমন কোনও ফাইল অ্যাক্সেস করার প্রয়োজন না হয় যা অ্যাপ-নির্দিষ্ট ডিরেক্টরি-এর বাইরে এবং MediaStore API অ্যাক্সেস করতে পারে এমন ডিরেক্টরির বাইরে সেভ করা আছে, তাহলে স্কোপড স্টোরেজ ব্যবহার করুন। আপনি যদি এক্সটার্নাল স্টোরেজে অ্যাপ-নির্দিষ্ট ফাইল স্টোর করেন, তাহলে এই ফাইলগুলি এক্সটার্নাল স্টোরেজে অ্যাপ-নির্দিষ্ট ডিরেক্টরিতে রেখে স্কোপড স্টোরেজ গ্রহণ করা আরও সহজ করতে পারেন। এইভাবে, স্কোপড স্টোরেজ চালু করা থাকলে আপনার অ্যাপ এইসব ফাইলে অ্যাক্সেস বজায় রাখে।

স্কোপড স্টোরেজের জন্য আপনার অ্যাপ প্রস্তুত করতে, স্টোরেজ ব্যবহারের উদাহরণ ও পেশাদার পদ্ধতি সংক্রান্ত নির্দেশিকা দেখুন। আপনার অ্যাপের যদি অন্য কোনও ব্যবহারের ক্ষেত্র থাকে যা স্কোপড স্টোরেজের আওতায় পড়ে না, তাহলে ফিচার অনুরোধ করুন। আপনি সাময়িকভাবে স্কোপড স্টোরেজ ব্যবহার করা থেকে বেরিয়ে আসতে পারেন।

ডিভাইসে ফাইল দেখুন

ডিভাইসে স্টোর করা ফাইল দেখতে, Android Studio-এর ডিভাইস ফাইল এক্সপ্লোরার ব্যবহার করুন।

অতিরিক্ত রিসোর্স

ডেটা স্টোরেজ সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত রিসোর্স দেখুন।

ভিডিও