saya telah melakukan pemrograman database SQLite untuk Android, tetapi saya tidak tahu apa-apa tentang Penyedia Konten kecuali ini: "Seperti yang saya rujuk ke halaman Pengembang Android, Android SDK menjelaskan tentang" Penyedia-konten "seperti yang digunakan untuk menyimpan dan mengambil data."
Tapi kemudian,
- Apa perbedaan persis antara "Penyedia-Konten" dan "Database SQLite"?
- Mana yang terbaik untuk menyimpan data, kapan?
Contoh atau bantuan apapun !!
sumber
ContentProvider
adalah fasad - API yang dapat Anda terapkan yang mengekspos database ke proses lain. Ini dapat diterapkan dengan cara di mana data disimpan dalam database SQLite, tetapi tidak harus demikian.Itu tidak mungkin untuk dijawab secara abstrak. Secara umum, kecuali ada sesuatu yang mengharuskan Anda untuk menggunakan
ContentProvider
, cukup gunakan database.sumber
Saya telah membuat banyak aplikasi bagus dengan ribuan pengguna yang menggunakannya yang hanya menggunakan metode SQLite. Tapi itu beberapa waktu yang lalu dan saya harus menulis banyak kode secara manual yang sekarang dapat dengan mudah ditangani oleh ContentProvider. Saat itu saya tidak mendukung penggunaan Penyedia Konten karena sepertinya hanya menambah kompleksitas dalam kode.
Namun selama beberapa tahun terakhir, karena Android telah berkembang, saya telah pindah ke ContentProvider karena menghemat waktu dan memungkinkan Anda melakukan lebih banyak hal. Saya sekarang menggunakannya secara ekstensif. Setelah Anda memiliki kelas Penyedia Konten tertulis, hidup Anda menjadi jauh lebih mudah. Dengan ContentProvider saya dapat dengan mudah menangani Cursor Loader, Loader Callbacks, dan Bulk Inserts yang saya harus menulis semuanya secara manual di masa lalu dan tetap saja tidak berfungsi dengan efisien. Terutama saat memperbarui tampilan daftar, yang sekarang diperbarui secara otomatis berkat hanya satu metode notifychange (). Ini berarti sekarang saya tidak perlu mengetikkan pendengar saya sendiri dan memperbarui konten secara manual dalam tampilan daftar dan adaptor. Selain itu, saya tidak perlu khawatir tentang membuka dan menutup database atau khawatir tentang kebocoran memori. Itu semua ditangani oleh Penyedia Konten. Satu-satunya masalah yang sesekali saya hadapi adalah Anda tidak dapat melakukan beberapa kueri kompleks di ContentProviders. Dalam hal ini Anda masih dapat menggunakan kueri mentah dan menggunakan interaksi manual kuno dengan sqlite.
Jika Anda sebelumnya telah menulis DbAdapter, Helper, dan Observer Anda sendiri, Anda dapat meneruskannya ke aplikasi baru dengan aman tanpa menghabiskan waktu untuk mengonversi semuanya ke ContentProvider. Tetapi berdasarkan pengalaman saya, saya sangat menyarankan untuk pindah ke ContentProvider. Butuh beberapa waktu untuk membiasakannya, tetapi begitu Anda mengalaminya, Anda akan tetap menggunakannya.
UPDATE 2017 Sekarang saya telah beralih ke Realm , cara yang jauh lebih baik untuk menggunakan database di platform apa pun. Luangkan beberapa jam untuk mempelajarinya, dan hemat banyak waktu dalam karier pengembangan aplikasi Anda.
sumber
1. Penyedia Konten tidak Aman untuk Thread
Secara default, penyedia konten tidak aman untuk thread. Jika Anda memiliki beberapa utas menggunakan penyedia konten, Anda dapat melihat banyak pengecualian berbeda yang dilemparkan dan ketidakkonsistenan data lainnya. Cara termudah untuk memperbaikinya adalah dengan menggunakan kata kunci tersinkronisasi di setiap metode publik yang diekspos oleh penyedia konten.
Dengan cara ini, hanya satu utas pada satu waktu yang dapat mengakses metode ini.
2. Bersenang-senanglah saat melakukan banyak penulisan
Saya memiliki kebutuhan dalam aplikasi Serval Maps baru untuk mengimpor data dari file biner ke dalam database yang digunakan secara internal oleh aplikasi. Untuk melakukan ini dan bermain bagus dengan aplikasi lainnya, yang terbaik adalah:
Menelurkan utas baru untuk melakukan impor sehingga utas lain tidak terkena dampak negatif, terutama utas yang bertugas memperbarui UI; dan Jeda sebentar di akhir setiap impor untuk memberikan kesempatan lain kepada utas lain yang perlu menggunakan metode tersinkronisasi.
3. Penyedia konten terkadang memaksa Anda untuk berpikir lateral
Cara kerja penyedia konten di Android adalah menyediakan lapisan abstraksi antara kode Anda yang lain dan database yang mendasarinya. Hal ini terutama disebabkan oleh fakta, sejauh yang saya tahu, bahwa penyedia konten dapat mengakses data dari tempat selain database.
Ini berarti Anda tidak dapat mengeksekusi kueri SQL mentah pada database yang mendasarinya dan Anda perlu menentukan berbagai komponen kueri SQL menggunakan variabel yang diteruskan ke berbagai metode seperti metode kueri. Jika Anda memiliki tugas yang tidak sesuai dengan cara SQL ditangani oleh penyedia materi, Anda memiliki dua opsi:
Pikirkan secara lateral tentang kueri, mungkin Anda bisa mendapatkan data yang Anda butuhkan dengan kueri alternatif dan mengakses hasil dari kursor; dan Gunakan URI untuk mengakses data secara normal dan URI khusus yang cocok dengan kueri tertentu untuk tugas-tugas yang tidak memiliki alternatif.
sumber
Penyedia Konten digunakan saat Anda ingin membagikan data Anda ke seluruh aplikasi.
Jika Anda memiliki database yang dilampirkan dengan aplikasi dan Anda ingin aplikasi lain menggunakan beberapa data, Anda bisa mengimplementasikan penyedia materi yang mengekspos data
sumber
Perbedaan utamanya adalah: saat aplikasi Anda perlu membagikan informasi ke aplikasi lain, gunakan Penyedia Konten. SQLite hanya menyimpan data untuk aplikasi yang membuatnya
sumber
Saya membaca jawaban ini sambil mencari keraguan yang sama, jadi berpikir untuk membagikannya. itu menyatakan -
Jadi, menggunakan penyedia konten adalah ide yang bagus.
sumber
Pikirkan Sistem Manajemen Konten tingkat lanjut. Setiap objek (halaman, gambar, artikel berita, item acara, dll.) Memiliki konten, alamat, izin pengguna, dan cara untuk berinteraksi dengannya dari berbagai bagian sistem. Penyedia Konten melakukannya untuk Android. Sekarang Anda dapat berbagi file atau gambar yang mungkin telah Anda simpan di aplikasi Anda. Anda juga dapat membuat objek kustom yang dapat dibagikan, seperti kontak bisnis, catatan yang dapat diedit, dll. Dan menentukan keamanan dan aplikasi default untuk menangani objek tersebut saat Anda membukanya dari aplikasi lain.
sumber
Satu perbedaan adalah Penyedia Konten memiliki dukungan platform untuk Pengamat Konten. Anda harus mengimplementasikan pola Observable Anda sendiri untuk database SQLite.
Cara melakukan kueri ulang secara otomatis dengan LoaderManager
ContentObserver untuk SQLite?
sumber