ในมุมมองของผู้ใช้งานโทรศัพท์ Android อาจจะเข้าใจได้ว่า Internal Storage คือ Storage ที่ built in มากับเครื่อง เช่น Samsung S21 128GB และ External Storage คือพวก SD Card ที่ใส่เพิ่ม แต่ในมุมมองของการพัฒนามันไม่ใช่แบบนั้นนะซิ !
___________
1. Internal Storage
คือพื้นที่ที่ถูกสร้างขึ้นหลังจากติดตั้ง Application เพื่อใช้เป็นพื้นที่ส่วนตัวของแต่ละแอป โดย directory จะถูกสร้างอยู่ที่ data/data/{ตามด้วยชื่อ package ของแต่ละแอป com.package.xxx} ซึ่งไฟล์ที่จัดเก็บในนี้จะไม่สามารถถูกเข้าถึงได้จาก Application อื่น หรือแม้แต่ user (ยกเว้นแต่เครื่องที่ถูก root นะ) และถ้าหาก user ลบแอปของเราทิ้ง ไฟล์พวกนี้ก็จะถูกลบไปด้วยเช่นกัน ตัวอย่างไฟล์ที่เก็บอยู่ในนี้ เช่น cache , Shared Preference, Cookies เป็นต้น และคำสั่งในการอ้างอิงถึง directory นี้คือ context.getFilesDir() และ context.getCacheDir()
2. External Storage
คือพื้นที่ภายนอกจาก Internal Storage ถ้ามองในมุมผู้ใช้งานมันคือพื้นที่ Storage ของโทรศัพท์และรวมถึง SD Card ด้วย เป็นพื้นสาธารณะที่ทุกแอปสามารถใช้งานได้ ซึ่งแอปที่ต้องการจัดเก็บไฟล์ไว้ที่ External Storage จำเป็นต้องขอ Permission จาก User ก่อน และเมื่อ user ลบแอปทิ้งไฟล์เหล่านั้นก็จะไม่ถูกลบตามไปด้วย เช่น Picture, Download หรือ Custom directory เป็นต้น
แต่ในเรื่องของ Storage บน Android 10 ขึ้นไปจะมีการเปลี่ยนแปลงค่อนข้างเยอะ โดยทาง Google จะบังคับใช้ Scope Storage กับแอปพลิเคชั่นเพื่อเพิ่มความเป็นส่วนตัวและความปลดภัย โดยการบังคับใช้ targetSdkVersion : 30 โดยบังคับใช้วันที่ 2 สิงหาคม 2564 สำหรับแอปใหม่ และ แอปอัพเดท บังคับใช้ 1 พฤศจิกายน 2564