2009-08-24 68 views
17

我有一個正在下載文件的服務。下載完成後,我想更新我的Activity中的「已下載的文件」列表,但前提是Activity正在運行。如果它尚未運行,我不希望Activity啓動。如何使用意圖更新活動?

我希望我可以做一個新的Intent與一些特殊的標誌。

任何人有任何想法我可以做到這一點?一個很小的代碼示例可能?

回答

19

您可以創建新的廣播接收器實例,並沿着你的活動的的onResume這些行做一些事情()方法:

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

之後,覆蓋myReceiver的的onReceive()方法調用,更新所需的組件的功能:

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

你的活動的的onPause()方法,只是註銷接收器:

unregisterReceiver(myReceiver); 

我希望這會幫助你,隨時詢問是否有什麼不清楚的地方。

+0

這是很好的方法的溝通。但是,如果活動處於暫停狀態,那麼結果如何交付?因此,onResume活動可能會等待很長時間才能獲得結果。並且沒有數據將被接收,因爲數據被遺漏。 – 2013-04-20 21:39:47

3

這樣做的好方法是將您的「已下載的文件」活動綁定到服務。在綁定服務時,在onServiceConnected函數中,註冊一個活頁夾回調。然後,只要有新的數據可用,服務就會調用該回調。如果活動未運行,則服務方的回叫列表將爲空,因此它不會通知您的活動。

對於這種方法的一個例子,看看RemoteService.java在Android SDK中:

樣本\ ApiDemos的\ src \ COM \例子\機器人\的API \程序\

+0

與Dimitar Dimitrov提出的意圖消息傳遞相比,這會帶來什麼好處?謝謝 – urSus 2013-03-11 01:15:07