2009-08-24 15 views
17

Bir dosya indiren bir servisim var. İndirme işlemi bittiğinde, Activity adresindeki "İndirilen dosyalar" listemi güncellemek istiyorum, ancak yalnızca Activity çalışıyorsa. Zaten çalışmıyorsa Activity'un başlamasını istemiyorum.Bir etkinliği güncellemek için nasıl kullanılır?

Bunu, bazı özel bayraklarla yeni bir Intent yaparak yapabileceğimi umuyordum.

Bunu nasıl başarabileceğimi bilen var mı? Küçük bir kod örneği olabilir mi? İstediğiniz bileşeni güncelleyen bir işlevi çağırmak için myReceiver en OnReceive() yöntemini geçersiz, Bundan sonra

registerReceiver(myReceiver, new IntentFilter(DownloadService.ACTION_FILE_DOWNLOADED)); 

:

cevap

19

Sen) (yöntemini yeni BroadcastReceiver örneğini oluşturmak ve etkinlik'ın onResume bu doğrultuda bir şeyler yapabiliriz :

unregisterReceiver(myReceiver); 
: en etkinlik'ın OnPause On

@Override 
public void onReceive(Context context, Intent intent) { 
... 
    updateViewWithData(service.getNewFileData()); 
... 
} 

() metodu, sadece alıcı kaydını

Umarım bu size yardımcı olur, belirsiz bir şey olup olmadığını sormakta özgürsünüz.

+0

Bu çok iyi bir şekilde iletişim Ancak, etkinlik duraklatılmış durumda olduğunda, sonuçların iletilmesi durumunda ne yapmalı? OnResume etkinliği sonrasında sonuçlar için uzun süre bekleyebilir. Ve veriler kaçırıldığından veri alınmayacaktır. –

3

Bunu yapmanın en iyi yolu, "İndirilen dosyalar" etkinliğinizi servise bağlamaktır. Hizmeti bağladığınızda, Hizmet Bildirimi'nin ondaki işleviyle bir Ciltçi geri çağrısı kaydedin. Ardından, yeni verileriniz olduğunda, servis sadece geri aramaları çağırır. Etkinlik çalışmıyorsa, hizmet tarafındaki geri arama listesi boş olacaktır, bu nedenle etkinliğinizi bilgilendirmez. Bu yaklaşıma bir örnek için

, Android SDK'sında RemoteService.java bakabilirsiniz:

numuneleri \ ApiDemos \ src \ com örnek \ android \ \ apis \ app \

+0

Dimitar Dimitrov'un önerdiği gibi mesajlaşma ile karşılaştırıldığında bunun avantajı ne olurdu? Teşekkürler – urSus

İlgili konular