"İçerik Sağlayıcı" ile "SQLite Veritabanı" arasındaki Tam Fark


87

Android için SQLite veritabanı programlaması yaptım, ancak İçerik Sağlayıcı hakkında bunun dışında hiçbir şey bilmiyorum: " Android Geliştirici sayfasına atıfta bulunduğum gibi , Android SDK, verileri depolamak ve almak için kullanıldığı için" İçerik sağlayıcı "hakkında açıklama yaptı."

Ama sonra,

  1. "İçerik Sağlayıcı" ve "SQLite Veritabanı" arasındaki tam fark nedir?
  2. Verileri depolamak için en iyisi ne zaman?

Herhangi bir örnek veya yardımcı olur !!

Yanıtlar:


135

Aşağıdaki gibi büyük bir fark buldum:

Verilerinizi bir veritabanında saklamak, verilerinizi korumanın iyi bir yoludur , ancak Android'de oluşturulan Android veritabanlarında visibleyalnızca onları oluşturan uygulama için bir uyarı vardır . Yani, Android üzerinde bir uygulama tarafından oluşturulan bir SQLite veritabanı, diğer uygulamalar tarafından değil, yalnızca o uygulama tarafından kullanılabilir.

Öyleyse, eğer siz need to share data between applications, you need to use the content provider model as recommended in Android.Bu makale, içerik sağlayıcıların temellerini ve birini nasıl uygulayabileceğinizi sunar.

Bu makaleyi bu bağlantıda buldum

Gerçekten güzel bilgiler sağlandı.


2
Görünüşe göre bağlantı artık yok ... artık makaleyi görmüyorum. Başvurduğunuz makaleyi tekrar bulursanız görmek isterim.
prolink007

11 Şubat 2012'de http://www.devx.com/wireless/Article/41133 bağlantısı çalışıyor,
k3b

Verileri birden çok uygulamada iş parçacığı açısından güvenli bir şekilde paylaşma sürecinde mekanizmalar sağlarsak ne olur?
Manohar

2
Diğer bir avantaj, içerik sağlayıcıların her işlem için tek bir iş parçacığı kullanmasıdır, bu nedenle birden fazla iş parçacığı, bir sqlite durumunda olduğu gibi veritabanını değiştiremez
Rat-a-tat-a-tat Ratatouille

54

"İçerik Sağlayıcı" ve "SQLite Veritabanı" arasındaki tam fark nedir?

ContentProviderbir cephe - veritabanlarını diğer işlemlere maruz bırakan, uygulayabileceğiniz bir API. Bu edebilir verileri bir SQLite veritabanında depolanan bir şekilde uygulanacak, ancak böyle olmak zorunda değildir.

Verileri depolamak için en iyisi ne zaman?

Soyut olarak cevaplamak imkansız. Genel olarak konuşursak, bir şey sizin a kullanmanızı gerektirmedikçe ContentProvider, sadece bir veritabanı kullanın.


26
SQL'e göre çok güzel bir soyutlama olduğu için ContentProvider kullanmayı tercih ediyorum. Ayrıca CursorAdapter ve otomatik istemlerle de iyi oynayabilirsiniz.
alexanderblom

27

Binlerce kullanıcıyla, basitçe SQLite yöntemlerini kullanan birçok iyi uygulama yaptım. Ancak bu bir süre önceydi ve artık ContentProvider tarafından kolayca halledilebilecek çok sayıda kodu manuel olarak yazmak zorunda kaldım. O zamanlar İçerik Sağlayıcıları kullanmaktan yana değildim çünkü kodda sadece karmaşıklık ekliyor gibiydi.

Bununla birlikte, son birkaç yıldır, Android geliştikçe, ContentProvider'a geçtim çünkü zamandan tasarruf sağladı ve daha fazlasını yapmanıza izin verdi. Şimdi yoğun bir şekilde kullanıyorum. Bir İçerik Sağlayıcı sınıfı yazdıktan sonra hayatınız çok daha kolay hale gelir. ContentProvider ile, geçmişte her şeyi manuel olarak yazmak zorunda kaldığım ve yine de verimli çalışmadığı İmleç Yükleyiciler, Yükleyici Geri Çağırmaları ve Toplu Eklemeler ile çok kolay başa çıkabiliyorum. Özellikle artık tek bir notifychange () yöntemi sayesinde otomatik olarak güncellenen liste görünümünü güncellerken. Bu, artık kendi dinleyicilerimi yazmam ve içeriği liste görünümlerinde ve bağdaştırıcılarda manuel olarak güncellemem gerekmediği anlamına geliyor. Ayrıca, veritabanlarının açılması ve kapatılması konusunda endişelenmeme veya bellek sızıntıları konusunda endişelenmeme gerek yok. Bunların tamamı İçerik Sağlayıcı tarafından ele alınır. Arada bir karşılaştığım tek sorun, ContentProviders'da bazı karmaşık sorgular yapamamanızdır. Bu durumda hala ham sorguları kullanabilir ve sqlite ile eski moda manuel etkileşimi kullanabilirsiniz.

Daha önce kendi DbAdapter, Helper ve Observer'ınızı yazdıysanız, her şeyi ContentProvider'a dönüştürmek için zaman harcamadan bunları yeni uygulamalarınıza güvenle taşıyabilirsiniz. Ancak deneyimlerime dayanarak, ContentProvider'a geçmenizi şiddetle tavsiye ederim. Alışmak biraz zaman alacak, ancak bir kez deneyim kazandıktan sonra onunla kalacaksınız.

GÜNCELLEME 2017 Artık veritabanlarını herhangi bir platformda kullanmanın çok daha iyi bir yolu olan Realm'e geçtim . Bunu öğrenmek için birkaç saat harcayın ve uygulama geliştirme kariyerinizde sayısız saatler kazanın.


Kodumu içerik sağlayıcıya dönüştürmeyi düşünüyordum ama şimdi onu korumayı düşünüyorum.
Muhammed Subhi Şeyh Kuruş

Artık Android'in 'Oda' kitaplığını da
ekleyebilirsiniz

8

1. İçerik Sağlayıcılar Konu İçin Güvenli Değildir

Varsayılan olarak içerik sağlayıcılar iş parçacığı açısından güvenli değildir. Bir içerik sağlayıcı kullanan birden fazla iş parçacığınız varsa, birçok farklı istisnanın ve diğer veri tutarsızlıklarının atıldığını görebilirsiniz. Bunu düzeltmenin en kolay yolu, senkronize edilmiş anahtar kelimeyi içerik sağlayıcı tarafından sunulan genel yöntemlerin her birinde kullanmaktır.

Bu şekilde bir seferde yalnızca bir iş parçacığı bu yöntemlere erişebilir.

2. Çok sayıda yazı yazarken iyi oynayın

Yeni Serval Maps uygulamasında, ikili dosyalardan, uygulama tarafından dahili olarak kullanılan veritabanına veri aktarmaya ihtiyacım var. Bunu yapmak ve uygulamanın geri kalanıyla iyi oynamak için en iyisi:

İçe aktarımı üstlenmek için yeni bir iş parçacığı oluşturun, böylece diğer iş parçacıkları, özellikle de kullanıcı arayüzünü güncellemekten sorumlu iş parçacığı olumsuz etkilenmez; ve Senkronize yöntemleri kullanması gereken diğer iş parçacıklarını bir şans daha vermek için her içe aktarmanın sonunda kısa bir süre duraklayın.

3. İçerik sağlayıcılar sizi bazen yanal düşünmeye zorluyor

Android'deki içerik sağlayıcıların çalışma şekli, kodunuzun geri kalanı ile temeldeki veritabanı arasında bir soyutlama katmanı sağlamaktır. Bu, bildiğim kadarıyla, içerik sağlayıcıların verilere veritabanları dışındaki yerlerden erişebilmesinden kaynaklanıyor.

Bu, temel alınan veritabanında ham SQL sorgularını yürütemeyeceğiniz ve sorgu yöntemi gibi çeşitli yöntemlere geçirilen değişkenleri kullanarak bir SQL sorgusunun çeşitli bileşenlerini belirtmeniz gerektiği anlamına gelir. Bir içerik sağlayıcı tarafından SQL'in işlenme şekline uymayan bir göreviniz varsa iki seçeneğiniz vardır:

Sorguyu yanal olarak düşünün, belki ihtiyacınız olan verileri alternatif sorgularla ve sonuçlara imleçten erişerek elde edebilirsiniz; ve Verilere normal şekilde erişmek için bir URI ve alternatifleri olmayan görevler için belirli bir sorgu ile eşleşen özel bir URI kullanın.


gereğince ContentProvider Aynı anda birden fazla iş parçacığı tarafından çağrılabilir uygulanması gerekir ContentProvider altı soyut yöntemler, bu nedenle iplik güvenli olarak uygulanması gerekir. Soyut sınıf ContentProvider, belirli bir kodun istisnalarının nedeni değil, uygulanmasıdır. ContentProvider'ın iş parçacığı güvenli yöntemlerini uygulamak için İşlemler ve İş Parçacıkları'nı izleyin .
StahlRat

5

Verilerinizi uygulamalar arasında paylaşmak istediğinizde İçerik Sağlayıcılar kullanılır.

Bir uygulamaya eklenmiş bir veritabanınız varsa ve başka bir uygulamanın bazı verileri kullanmasını istiyorsanız, verileri açığa çıkaran bir içerik sağlayıcı uygulayabilirsiniz.


3

Temel fark şudur: Uygulamanızın başka uygulamalarla bilgi paylaşması gerektiğinde, İçerik Sağlayıcıyı kullanın. SQLite yalnızca onu oluşturan uygulama için depolama verileri


3

Bu cevabı aynı şüpheyi ararken okudum , bu yüzden paylaşmayı düşündüm. belirtir -

Dahili olarak değiştirmeyi kolaylaştırmak için verileriniz üzerinde ekstra soyutlama düzeyi sağlamak iyi bir uygulamadır. Altta yatan veritabanı yapısını daha sonra değiştirmeye karar verirseniz ne olur? Bir ContentProvider kullanıyorsanız, içindeki tüm yapısal değişiklikleri içerebilir, bir tane kullanmıyormuş gibi, yapısal değişikliklerden etkilenen kodun tüm alanlarını değiştirmek zorunda kalırsınız. Ayrıca, kodunuzu veritabanına düşük seviyeli erişimle karıştırmak yerine, verilere erişmek için aynı standart API'yi yeniden kullanabilmek güzel.

Dolayısıyla, bir içerik sağlayıcı kullanmak iyi bir fikir olacaktır.


3

Gelişmiş İçerik Yönetim Sistemlerini düşünün. Her nesnenin (sayfa, resim, haber makalesi, olay öğesi, vb.) Bir içeriği, adresi, kullanıcı izinleri ve sistemin farklı bölümlerinden onunla etkileşim kurma yolları vardır. İçerik Sağlayıcılar bunu Android için yapar. Artık uygulamanızda saklamış olabileceğiniz dosyaları veya görüntüleri paylaşabilirsiniz. Ayrıca, iş bağlantıları, düzenlenebilir notlar vb. Gibi özel paylaşılabilir nesneler de oluşturabilirsiniz. Ayrıca, başka bir uygulamadan açtığınızda bu tür nesnelerle ilgilenmek için güvenliği ve varsayılan uygulamayı belirleyebilirsiniz.


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.