2009-07-22 8 views
6

İşte anlaşma: Her X saniyede bir web servisi çağırması gereken bir Android uygulamasına sahibim (şu anda 60 saniye). Bu uygulamada birden çok sekme var ve bu sekmelerin tümü verilerin kendileriyle etkileşime girmeye ihtiyaç duyuyor. Biri bir MapView, biri bir ListView ve üçüncüsü alakasız ama sonunda bazı global verileri de almalı. Sorun şu ki, ana faaliyetimin arka planda çalışan bir iş parçacığı olmasını, sonuçları almasını ve ardından en son verilerle kendilerini güncelleştirmek için hem TabHost'da hem de çocuk aktivitelerini bildirmesini istiyorum. Ayrıca, kullanıcı sekmeleri ve onCreate/onResume etkinliklerini de tetiklediğinde, ana etkinlikten en son verileri alarak yeniden çizmeyi zorlamak isterim. Burada gerçekten bir kayıp yaşıyorum. Bunu bir hizmet ve bazı getto statik yöntemlerle çalıştırarak, zamanlayıcı tetiklendiğinde görünümlerini güncelleştirmek için belirli işlevleri çağırmak için Hizmetlere bir örnek geçirmek için çalıştı, ancak yavaşlama oldukça kötü ve kod sadece çirkin çirkin çirkin . Baska öneri?Bir Android TabHost uygulamasında etkinlik içi iletişimi gerçekleştirmenin en iyi yolu

düzenleme: Bu nedenle, sekme etkinliğinde zamanlayıcı tarafından yönlendirilen bir iş parçacığı olarak uyguladıktan sonra, her alt etkinlikte, verileri (eşzamanlı olarak) yakalayıp haritalarını/listesini güncelleyen zamanlayıcı odaklı iş parçacıklarım var. Bu benim tamamen heyecan değilim güçlü bağlantı unsurunu ekleyen

((MainActivity)getParent()).getNearbyMatches(); 

: Öyle gibi ana aktivitesinde özel bir işlev arıyorum nerede hafifçe kesmek-imsi hisseder, özellikle kısmını hala çok daha hızlı ama Bununla birlikte, performans açısından baktığından çok daha iyi. Önceden verilmiş olan cevapları takdir ediyorum ve içerik sağlayıcılar hakkında biraz araştırma yapacağım ama hizmet modeline geri dönmek istediğimden emin değilim.

+0

Keşke bunu nasıl yapacağımı biliyordum!+1 – cakeforcerberus

cevap

7

kullanın. Yanıtın ne olduğuna inandığımı buldum: The Application Class. Global uygulama durumunu takip etmek için bu sınıfı genişletebilirsiniz.

AndroidManifest.xml dosyasında, tam yetkili özel sınıfınıza android:name özniteliğinde başvurabilirsiniz ve uygulama başlatıldığında başlatılacaktır.

Herhangi bir Etkinlik daha sonra "getApplication()" numaralı telefonu arayabilir ve ardından özel Uygulama sınıfınızın örneğini döndürür ve ardından damak tadınıza göre uyarlayabilirsiniz.

+0

ve başlatması gereken etkinlik zaten çalışıyorsa bir alıcı sınıfı içinde nasıl kontrol edebilirim? – bofredo

1

GUI güncelleştirmelerinizi Handler s içinde uygulayabilir ve Handler örneklerini karşıdan yüklemenizle kaydedebilirsiniz. İndirme iş parçacığı, daha sonra yeni veriler geldiğinde işleyicilere mesaj gönderir. Esasen bu, Observer Pattern. Handler s here'un nasıl kullanıldığıyla ilgili bir örnek bulabilirsiniz ('Örnek ProgressDialog'u ikinci bir iş parçacığıyla' bölümünü genişletin).

5

Her yeni veri olduğunda her çocuk aktivitesini neden güncelliyorsunuz? Bu bana verimsiz geliyor. Sadece şu anda görünür olan etkinliği güncelleyin.

Bunu yapmanın olası bir yolu custom content provider aracılığıyla yapılır. Hizmetinizin veri kaynağını etkinliklerinize güncellemesine izin verin ve bu içerikteki değişiklikleri dinlemek için mevcut görünür etkinliği edinin. Yani, temel olarak OnResume çağrıldığında içerik sağlayıcınıza kayıt ol ve OnPause çağrıldığında kayıtsız kal.

Genel kural olarak, bir Etkinliğin statik referanslarını asla saklamayın !! Çirkin sızıntılarla sonuçlanacaksınız. Uygulamanız için bir zorunluluk varsa, en azından