Android'in ContentProvider'ı neden oluşturuldu?


11

Başlık sorumu özetliyor, ancak temel olarak anlamak istediğim şey, Android tasarımcılarının neden doğrudan SQLite veritabanına erişmek yerine bir İçerik Sağlayıcı kullanmak için paylaşılan verilerle çalışması gereken uygulamaların olmasını istiyor?

Düşünebilmemin tek nedeni güvenliktir çünkü belirli dosyalara yalnızca belirli işlemler erişebilir ve bu şekilde İçerik Sağlayıcı, veritabanı uygulamasına okuma ve / veya yazma erişimine izin vermeden önce her uygulamanın uygun ayrıcalıklara sahip olmasını sağlayan bir bekçidir. ContentProvider'ın oluşturulmasının ana nedeni bu mu?

Yanıtlar:


6

Her şeyden önce veri tüketicilerini ve veri sağlayıcılarını yalıtmanın bir yoludur. Verilerinizden bazılarını herkese açık hale getirmek veya en azından başka bir uygulama için kullanılabilir hale getirmek istiyorsanız kendi içerik sağlayıcınızı geliştirir veya mevcut bir sağlayıcıyı genişletirsiniz.

Doğru bu, sunucuları güvenlik açısından erişimleri kontrol etmek için kullanabilir, ancak verilerinizin fiziksel uygulamasını istediğiniz zaman yeniden çalışmanıza da olanak tanır. Tek yapmanız gereken bu durumda içerik sağlayıcınızın arka ucunu uyarlamaktır. Veri tüketici uygulamalarının yeniden yazılması gerekmeyecektir. Temel uygulamadaki değişikliklerden habersiz, içerik çözücü aracılığıyla verilerinize erişmeye devam ederler.

Ayrıca, verilere birkaç istemci tarafından erişilse bile, Android içerik sağlayıcınızın yalnızca bir örneğini başlatır, böylece ilgilenmek zorunda kalmadan eşzamanlı erişimlerle ilgilenir.

Son olarak, temiz başlatma ve kapanma hilelerini de ele alacağına inanıyorum.


1
Yalıtımın muhtemelen en iyi cevap olduğunu düşünüyorum. Eşzamanlı erişim, SQLite ve Android Java arabirimi eşzamanlılığı ele alma konusundaki fikrinizi kabul etmiyorum, ContentProvider'ın kendisi birden fazla eşzamanlı iş parçacığını sorgulamak / eklemek / güncellemek için izin veriyor, böylece sizin için hiçbir şey yapmıyor.
satur9nine

3

ContentProviderDiğer üçüncü taraf uygulamaların ile iletişim kurmak için gerekli olan işlemler arası tüm iletişim üzerinden özetler. Bu kodu kendiniz yazmak büyük bir acı olacaktır.


3. taraflar her zaman doğrudan veritabanı dosyasına erişebilir, orada süreçler arası iletişim gerekmez.
satur9nine

Ne demek istediğinden emin değilim ... bir uygulama "üçüncü taraf" ise, tanım gereği farklı bir süreçte mevcut olmalıdır (her Android uygulamasının kendi ana süreci olduğundan). Ayrıca Android işletim sistemi, diğer uygulamaların ham veri depolarına doğrudan erişmenize izin verdiyse, bu oldukça büyük güvenlik sorunları yaratacaktır.
Alex Lockwood

1

ContentProvider ayrıca verilerin nasıl saklandığına / üretildiğine ilişkin ayrıntıları gizleyen bir soyutlamadır. Örneğin, uygulamalarımdan birinde PNG görüntülerini döndüren bir içerik sağlayıcım var. Bu görüntüler hiçbir yerde depolanmaz, talep üzerine üretilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.