kullanma vs ContentResolver içerik sağlayıcı erişmek için ContentProviderClient
documentation on Android content providers kullanarak ContentResolver
içeriğe erişim getContentResolver()
, elde açıklar.
Ancak aynı zamanda bir getContentResolver().acquireContentProviderClient(authority)
elde edilebilir ContentProviderClient
. Daha fazla veya daha az aynı yöntemleri sağlayıcıdan içeriğe erişmek için ContentResolver
mevcut sağlamak gibi görünüyor.
Sadece ContentResolver
yerine ContentProviderClient
doğrudan kullanmalıyım? Avantajları nelerdir?
CEVAP
Android cihazınız her benzersiz İçerik bir Otorite tarafından tanımlanan birçok veritabanı var. Bu "etki alanı adı" ilk önce eğik çizgi:// urı içerik ... her parçası eşdeğer.
ContentResolver
Veri ContentProvider
String contentAuthority
bir eşleme sağlayan depolar. Zaman sana haber ContentResolver.query()
update()
ya da ne var, URİ ayrıştırılır ayrı bileşenlerini, contentAuthority dize tespit ve contentResolver için arama harita için eşleşen bir dize, ve doğrudan sorgu hakkı sağlayıcısı. Bu pahalı arama URİ aramak için arama farklı, farklı bir contentAuthority ile de olabilir çünkü her arama sırasında oluşur. Ayrıca, bazı masrafları ve aşağı çağrıları yeniden olamaz, belirli bir sağlayıcı bir bağlantı kurma yırtılma dahil olabilir. Yükü var işin içinde emin değilim, bu çok derin bazı OS düzeyi kodu.
Bunun aksine, zaman sana haber acquireContentProviderClient(authority)
, "ne sağlayıcısı yapmak istiyorum?" arama yapılır sonra, size verilen bir ContentProviderClient
aslında bir doğrudan bağlantı için ContentProvider
. (Sen ve çapraz iplik iletişim ve eşzamanlılık kilitleme) içeren sağlayıcı arasında yapıştırıcı bir parça var. Kullandığınızda, ancak ContentProviderClient
doğrudan isteme yetkisi için Sağlayıcı ile konuşun. Bu sürekli atık yeniden hesaplama "hangi sağlayıcı istiyor muyum?" kaldırır
NOT:Eğer bir ContentProviderClient alırsanız, . acquireContentProviderClient() documentation başına: ^em>"Arayanın gerektiğini belirten onlar bitti sağlayıcı tarafından arama ContentProviderClient.release() sağlayacak sistem yayın kuruluşu bunu belirleyen başka bir nedenle aktif tutmak."Yani aslında, Eski bir İstemci açık bırakarak Sağlayıcı arka planda bir hizmet olarak çalışmasını zorlar. , Temizlemek için unutmayın!
Özet:
ContentAuthorities değişen birçok çağırır:ContentResolver
kullanın.
Aynı Makam için çağrılar:Elde etmek ve ContentProviderClient
kullanın. Serbest hatırla() işin bittiğinde.
İçerik Sağlayıcı kullanma zamanı...
Düzenli ifade bir e-posta adresi doğru...
Nasıl Python ortam değişkenleri erişme...
Nasıl SQL Server ile kullanma İÇ BİRLE...
Nasıl bir boru ile kullanma "tee&...