Mengapa ContentProvider Android dibuat?


11

Judul merangkum pertanyaan saya, tetapi untuk menguraikan pada dasarnya apa yang ingin saya pahami adalah mengapa perancang Android menginginkan aplikasi yang perlu bekerja dengan data bersama untuk menggunakan Penyedia Konten daripada hanya mengakses database SQLite secara langsung?

Satu-satunya alasan yang dapat saya pikirkan adalah keamanan karena file tertentu dapat diakses hanya dengan proses tertentu dan dengan cara itu Penyedia Konten adalah penjaga gerbang yang memastikan setiap aplikasi memiliki hak yang tepat sebelum mengizinkan akses baca dan / atau tulis ke file database. Apakah itu alasan utama mengapa ContentProvider dibuat?

Jawaban:


6

Ini di atas semua cara isolasi data konsumen dan penyedia data. Anda mengembangkan penyedia konten Anda sendiri atau memperluas yang sudah ada jika Anda ingin membuat sebagian data Anda publik atau setidaknya tersedia untuk aplikasi lain.

Benar ini dapat server untuk mengontrol akses dari sudut pandang keamanan tetapi juga memungkinkan Anda untuk mengolah kembali implementasi fisik data Anda kapan pun Anda mau. Yang perlu Anda lakukan adalah mengadaptasi back-end penyedia konten Anda dalam hal itu. Aplikasi data konsumen tidak harus ditulis ulang. Mereka akan terus mengakses data Anda melalui penyelesai konten mereka tanpa mengetahui adanya perubahan dalam implementasi mendasar yang sebenarnya.

Selain itu, Android hanya akan membuat instantiate satu instance dari penyedia konten Anda bahkan jika data diakses oleh beberapa klien sehingga akan menangani akses bersamaan tanpa Anda harus peduli.

Akhirnya, saya percaya ini juga akan menangani pekerjaan start yang sulit dan mematikan.


1
Saya pikir isolasi mungkin adalah jawaban terbaik. Saya tidak setuju dengan poin Anda tentang akses bersamaan, SQLite dan antarmuka Java Android menangani konkurensi, ContentProvider sendiri memungkinkan beberapa utas simultan untuk kueri / masukkan / perbarui sehingga tidak benar-benar melakukan apa pun untuk Anda.
satur9nine

3

The ContentProviderjuga abstrak keluar semua komunikasi antar-proses yang diperlukan untuk berkomunikasi dengan aplikasi pihak ketiga lainnya. Harus menulis kode ini sendiri akan sangat menyebalkan.


Pihak ke-3 selalu bisa hanya mengakses file database secara langsung, tidak ada komunikasi antar-proses yang diperlukan di sana.
satur9nine

Saya tidak yakin apa yang Anda maksud ... jika suatu aplikasi adalah "pihak ketiga" maka menurut definisi itu harus ada dalam proses yang berbeda (karena setiap aplikasi Android memiliki proses utamanya sendiri). Juga jika OS Android memungkinkan Anda untuk memiliki akses langsung ke penyimpanan data mentah aplikasi lain, itu akan menimbulkan beberapa masalah keamanan yang cukup besar.
Alex Lockwood

1

ContentProvider juga merupakan abstraksi yang menyembunyikan detail tentang bagaimana data disimpan / dihasilkan. Misalnya, di salah satu aplikasi saya, saya memiliki penyedia konten yang mengembalikan gambar PNG. Gambar-gambar ini tidak disimpan di mana pun, mereka dihasilkan sesuai permintaan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.