2012-12-26 11 views
6

İçerik sağlayıcıların hizmetleri kadar basit bir şekilde etkileşimde bulunmanın bazı yolları var mı?Hizmetlerle etkileşimde bulunmanın basit yolları?

Örneğin, içerik sağlayıcılarıylanumaralı telefonu kullanıyoruz: Context varsa, verileri sorgulamak kolaydır. Çapraz işlem çağrılarının ayrıntıları hakkında endişelenmenize bile gerek yok (ContentProvider).

Servislerle bunları bağlamak zorundasınız, bağlantı kurulmasını bekleyin, ardından belleği sızdırmak istemiyorsanız bunları çözdüğünüzden emin olun. Daha da kötüsü, uzak servisler için AIDL ile uğraşmanız gerekiyor.

bu örneği alınması:

Bir dosya indirici modülü var. Şu anda iki yaklaşım var: içerik sağlayıcı veya servis. Her yeni yüklemeyi başlatmak için her ikisi için de kolaydır:

  • Service: startService(). Sadece bir bağlama ihtiyacın var.
  • İçerik sağlayıcısı: getContentResolver() ve yeni indirme sırasına ekleyin. Ayrıca sadece bir bağlama ihtiyacınız var.

Ancak indirmeler devam ederken, bazı bilgileri (ortalama hız, yüzde yapıldı…) elde etmek istiyorum. Sorun şu: Bir içerik sağlayıcı ile iletişim kurmak daha kolay. Yine sadece bir bağlama ihtiyacınız var ve istediğiniz bilgiyi sorgulayın. Bir hizmet durumunda, onu bağlamanız, açmanız veya kendi AIDL'nizi (uzak bir hizmetse) oluşturmanız gerekir…

Yukarıdaki soruya örnek olarak bir hizmetin doğru olduğu için bu soruyu soruyorum. Bir içerik sağlayıcısının yaklaşımı, en azından adı nedeniyle.

Teşekkürler, ben bunu öneririm

+0

"Ortalama hız", "yüzde yüzdesi" bilgileri ile ne yapacaksınız? – Squonk

+0

@Squonk Kullanıcıların bilmek istediği durumlarda bunları kullanıcı arayüzünde görüntülemek istiyorum. –

cevap

4

iki yolu ...

ilk Parcelable uygulayan ResultReceiver kullanarak denemektir.

Temelde ResultReceiver o zaman Activity den startService(Intent intent) geçmek bir Intent üzerinde putExtra(String name, Parceable value çağrı uzanır kendi sınıf oluşturmak. Service, daha sonra verileri geri göndermek için ResultReceiver numaralı telefondan send(int resultCode, Bundle resultData)'u kullanabilir. ResultReceiver, Activity'un iç sınıfıysa, UI ile etkileşime girebilir.

İkinci olasılık Notifications işaretini FLAG_ONGOING_EVENT işaretini kullanarak kullanmaktır. Bu açıkça Activity içinde görünmeyecek, ancak Notification çubuğunda görünecektir, ancak her güncellenmiş bildirim ile bir ilerleme ve güncelleme metin vb özel bir RemoteView oluşturabilirsiniz. Bu, Google Play cihazınızdaki bir uygulamayı yüklerken veya güncellerken gördüğünüzle benzer.

+0

Harika cevap. Çok teşekkür ederim. Beni “ResultReceiver” ile bir gün kaydettiniz, özellikle API 3+ sürümünde mevcut. Teşekkür ederim :-) –

+1

Yardım için sevindim. Bir "Servis" ile bir "Etkinlik" arasında iletişim kurmak için kendim ResultReceiver' kullanıyorum. Oldukça iyi çalışıyor. – Squonk

+1

@LaiVung: İndirmeler için ayrıca "IntentService" e bakın - kendi çalışan iş parçacığını oluşturur ve işini bitirdikten sonra kendi kendini sonlandıracak. Bakınız - http://developer.android.com/reference/android/app/IntentService.html – Squonk