Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Ringkasan penyimpanan data dan file

Android menyediakan sejumlah opsi bagi Anda untuk menyimpan data aplikasi. Solusi yang dipilih bergantung pada kebutuhan khusus Anda, seperti berapa banyak ruang yang diperlukan data, jenis data yang perlu disimpan, dan apakah data harus bersifat pribadi untuk aplikasi Anda atau harus dapat diakses aplikasi dan pengguna lain.

Halaman ini memperkenalkan opsi penyimpanan data yang berbeda yang tersedia di Android:

Kecuali untuk beberapa jenis file pada penyimpanan eksternal, semua opsi ini dimaksudkan untuk data pribadi aplikasi—data tidak secara natural dapat diakses untuk aplikasi lain. Jika ingin membagikan file dengan aplikasi lain, Anda harus menggunakan FileProvider API. Untuk mempelajari lebih lanjut, baca Berbagi File.

Jika ingin mengekspos data aplikasi untuk aplikasi lain, Anda bisa menggunakan ContentProvider. Penyedia materi memberi Anda kontrol penuh atas akses baca/tulis yang tersedia untuk aplikasi lain, terlepas dari media penyimpanan yang Anda pilih untuk data tersebut (meskipun data biasanya berupa database). Untuk informasi selengkapnya, baca Penyedia Materi.

Penyimpanan internal

Secara default, file yang disimpan ke penyimpanan internal bersifat pribadi untuk aplikasi Anda, dan aplikasi lain tidak dapat mengaksesnya (begitu juga penggunanya, kecuali jika memiliki akses root). Ini menjadikan penyimpanan internal merupakan tempat yang bagus untuk data aplikasi internal yang pengguna tidak perlu untuk mengakses secara langsung. Sistem menyediakan direktori pribadi pada sistem file untuk setiap aplikasi tempat Anda dapat mengatur file yang diperlukan aplikasi Anda.

Saat pengguna menghapus aplikasi, file yang disimpan di penyimpanan internal akan dihapus. Karena perilaku ini, Anda tidak boleh menggunakan penyimpanan internal untuk menyimpan apa pun yang pengguna harapkan untuk mempertahankan aplikasi Anda secara independen. Misalnya, jika aplikasi Anda memungkinkan pengguna mengambil foto, pengguna tersebut mengharapkan dapat mengakses fotonya setelah menghapus aplikasi Anda. Anda harus menggunakan API MediaStore untuk menyimpan jenis file tersebut ke koleksi media yang sesuai.

Untuk mempelajari lebih lanjut, baca cara menyimpan file di penyimpanan internal, sama seperti cara menggunakan MediaStore untuk memutar musik berdasarkan kueri penelusuran.

File cache internal

Jika Anda ingin menyimpan beberapa data sementara, daripada menyimpannya secara persisten, sebaiknya gunakan direktori cache khusus untuk menyimpan data. Setiap aplikasi memiliki direktori cache pribadi khusus untuk jenis file ini. Jika perangkat hampir kehabisan ruang penyimpanan internal, Android bisa menghapus file cache ini untuk memulihkan ruang. Namun, Anda tidak boleh bergantung pada sistem untuk membersihkan file-file ini. Anda harus selalu mengelola sendiri file cache ini dan menjaga ruang yang digunakan dalam batas wajar, seperti 1MB. Jika pengguna menghapus aplikasi Anda, file ini akan dihapus.

Untuk informasi selengkapnya, lihat cara menulis file cache.

Penyimpanan eksternal

Setiap perangkat Android mendukung "penyimpanan eksternal" bersama yang bisa Anda gunakan untuk menyimpan file. Ruang ini disebut eksternal karena tidak dijamin bisa diakses—ini ruang penyimpanan yang bisa pengguna pasangkan ke komputer sebagai perangkat penyimpanan eksternal, dan bahkan mungkin secara fisik bisa dilepas (seperti kartu SD). File yang disimpan ke penyimpanan eksternal bisa dibaca oleh semua dan dapat dimodifikasi oleh pengguna ketika mereka mengaktifkan penyimpanan massal USB untuk mentransfer file di komputer.

Jadi, sebelum berupaya mengakses file di penyimpanan eksternal aplikasi, Anda harus memeriksa ketersediaan direktori penyimpanan eksternal sama seperti file yang Anda coba akses.

Paling sering, Anda harus menggunakan penyimpanan eksternal untuk data pengguna yang seharusnya bisa diakses untuk aplikasi lain dan disimpan sekalipun pengguna menghapus aplikasi Anda, seperti foto yang diambil dan file yang didownload. Sistem menyediakan direktori publik standar untuk jenis file ini, sehingga pengguna memiliki satu lokasi untuk semua foto, nada dering, musik, dan semacamnya.

Anda juga bisa menyimpan file ke penyimpanan eksternal dalam direktori khusus aplikasi yang dihapus sistem saat pengguna menghapus aplikasi Anda. Hal ini dapat menjadi alternatif yang berguna untuk penyimpanan internal jika Anda memerlukan lebih banyak ruang, namun file di sini tidak dijamin bisa diakses karena pengguna dapat melepas kartu SD penyimpanan. Dan file tetap bisa dibaca dunia; file tersebut hanya disimpan ke lokasi yang tidak digunakan bersama aplikasi lain.

Untuk informasi selengkapnya, baca cara menyimpan file di penyimpanan eksternal.

Preferensi bersama

Jika tidak perlu menyimpan banyak data dan tidak memerlukan struktur, Anda harus menggunakan SharedPreferences. API SharedPreferences memungkinkan Anda membaca dan menulis pasangan kunci-nilai persisten dari jenis data primitif: boolean, float, ints, long, dan string.

Pasangan kunci-nilai ditulis ke file XML yang bertahan di berbagai sesi, sekalipun aplikasi Anda ditutup. Anda bisa secara manual menentukan nama untuk file atau gunakan file per-aktivitas untuk menyimpan data.

Nama API "preferensi bersama" agak menyesatkan karena API tidak sepenuhnya untuk menyimpan "preferensi pengguna", seperti nada dering yang dipilih pengguna. Anda bisa menggunakan SharedPreferences untuk menyimpan segala jenis data sederhana, seperti skor tinggi pengguna. Akan tetapi, jika Anda ingin menyimpan preferensi pengguna untuk aplikasi Anda, sebaiknya baca cara buat UI setelan, yang menggunakan Preference Library AndroidX untuk membuat layar pengaturan dan mempertahankan setelan pengguna.

Untuk mempelajari cara menyimpan semua tipe data kunci-nilai, baca Simpan Data Kunci-Nilai dengan SharedPreferences.

Database:

Android memberikan dukungan penuh untuk database SQLite. Database yang Anda buat hanya bisa diakses dengan aplikasi Anda. Akan tetapi, sebagai ganti menggunakan API SQLite secara langsung, kami menyarankan Anda membuat dan berinteraksi dengan database dengan library persistensi Room.

Library Room menyediakan layer abstraksi pemetaan objek yang memungkinkan akses database yang lancar sekaligus memanfaatkan kekuatan penuh SQLite.

Walaupun Anda tetap bisa menyimpan data secara langsung dengan SQLite, API SQLite berada di tingkat yang cukup rendah dan memerlukan banyak waktu dan upaya untuk digunakan. Sebagai contoh:

  • Tidak ada verifikasi waktu-kompilasi kueri SQL mentah.
  • Saat skema Anda berubah, Anda perlu mengupdate kueri SQL yang terpengaruh secara manual. Proses ini bisa memakan waktu dan rawan kesalahan.
  • Anda perlu menulis banyak kode boilerplate untuk mengonversi antara kueri SQL dan objek data Java.

Library persistensi Room menangani masalah ini untuk Anda sekaligus menyediakan layer abstraksi melalui SQLite.

Untuk aplikasi contoh yang mendemonstrasikan cara menggunakan Room, lihat yang berikut ini di GitHub:

Men-debug database

Android SDK menyertakan alat database sqlite3 yang memungkinkan Anda untuk menjelajah isi tabel, menjalankan perintah SQL, dan melakukan fungsi penting lainnya pada database SQLite. Untuk informasi selengkapnya, lihat dokumentasi adb.

Sumber daya tambahan

Untuk informasi selengkapnya tentang penyimpanan data, konsultasikan sumber daya berikut.

Codelab