2012-06-18 13 views
14

Android programlamasında yeniyim, bu yüzden uygulamanızı tasarlamanın en iyi yolunu seçme konusunda bazı genel sorunlarla karşılaşıyorum.Android hizmeti, başlatılan aktivitenin kullanıcı arayüzünü nasıl güncelleyebilir?

Yapmak istediğim temel olarak bir medya yürütücüsüdür. Medya yürütücünün bir hizmet üzerinde çalışmasını istiyorum çünkü etkinlik görüntülenmediğinde de oynatılmasını istiyorum.

Sorum şu: Hizmet çalışan akışına bağlı olarak kullanıcı arayüzünü nasıl güncelleyebilirim (örneğin, şarkı değişiklikleri ve adının görüntülenmesini istiyorum)?

Ben (sağ görünüyor?)

UI güncelleştirmeleri Etkinliğime benim hizmetinden amaç göndermesine ve çağırmak için bir Yerel Yayın Yöneticisi kullanabilirsiniz AMA ... Ben yapmak benim hizmetinizi isteyecek tahmin müzik çalarken bazı şeyler (DB'yi sorgulamak/güncellemek gibi). Bu nedenle, hizmeti farklı bir süreçte (veya thread?) Çalıştırmayı düşünüyordum.

SO .. Sanırım, farklı bir süreçte servis çalıştırmak, yerel yayın yöneticisini kullanamayacağım (bu doğru mu?).

Umarız benim şüphelerim nelerdir ... herkes yardımcı olabilir?

çok teşekkürler!

cevap

15

Arka planda yapmanız gereken işi yönetmek için hizmetinizde bir uyumsuz görevi kullanın. Kullanıcı arayüzünü güncellemeniz gerektiğinde, ilgili herhangi bir aktiviteye geri yayın göndermek için asenkronizasyon görevinin progressUpdate yöntemini kullanın.

Sözde örnek.

Etkinlik

onCreate -> StartService ve yeni broadcastReceiver oluşturun. OnReceive yöntemini geçersiz kıldığınızdan emin olun ve belirli bir amaç için test edin.

mLocalBroadcastManager = LocalBroadcastManager.getInstance(this); 

    broadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if(intent.getAction().equals(yourActionType)) { 
       //do work here 
      } 
     } 
    }; 

onResume -> Bir yayın alıcısı

IntentFilter filter = new IntentFilter(); 
    filter.addAction(yourActionType); 
    mLocalBroadcastManager.registerReceiver(broadcastReceiver, filter); 

Servis

onCreate olarak kayıt -> yaratmak yayın yöneticisi. OnStartCommand -> gerekirse yeni bir uyumsuz görev oluşturun ve çalıştırın. (OnStart defalarca denilebilir)

Async Görev

doInBackground -> ne gerek arka plan görevi başlatın. Bu durumda müzik çalmak. publishProgress

periyodik görüşmeler yapın

onProgressUpdate -> sendBroadcast OnPostExecute

Intent broadcastIntent = new Intent(yourActionType); 
    broadcastIntent.putExtra(whateverExtraData you need to pass back); 
    mLocalBroadcastManager.sendBroadcast(broadcastIntent); 

güncellenmiş statü gösteren -> sendBroadcast belirten görev

+0

Çok teşekkürler sona erdi.ama yayın mesajları hakkında ne dersiniz? Yerel olarak kullanılmaya elverişsiz değiller mi? – super

+0

@super Cevabımı, yerel yayınların nasıl kullanıldığına dair bir örnek eklemek için düzenledim. Eski bir api verison'u hedefliyorsanız, kitaplığınızda android-support-v4.jar dosyasının bulunduğundan emin olun. – Mike

+0

çok teşekkürler. Nasıl gideceğimi size bildireceğim;) – super