2011-04-16 73 views
4

我有一個活動(ListActivity),其中如果用戶點擊一個按鈕,我啓動了一個「IntentService」的意圖,基本上對Web服務進行REST調用並收集數據。 我的問題是,一旦服務完成,我填充活動中的項目列表,這只是一個靜態變量。但是,我無法啓動listadaptor,要求它在數據發生變化時刷新視圖。有人能告訴我如何在IntentService完成任務後「通知」刷新的活動?Android IntentService提供數據回到活動

回答

9

如果您正在進行REST調用,我會建議您使用IntentService而不是AsyncTask。 AsyncTask看起來不錯而且有用,但它需要非常小心,不要泄漏上下文並將結果返回到可能早已離開的Activity,這使得它不易正確使用。

敬請收看呈現非常有益的指導方針:

http://www.youtube.com/watch?v=xHXn3Kg2IQE

編輯: 至於發回的結果,您可以在您的意圖parcelable ResultReceiver你先從IntentService,並通知活動(並在那裏處理適配器刷新)使用.send()

至於刷新ListAdapter,它真的取決於您使用的是哪種類型。如果它是一個簡單的適配器,可以將其交換使用

getListView().setAdapter(adapter) 

但你會與CursorAdapter好得多,只是要求

context.getContentResolver().notifyChange(uri, null); 

如果背景是你的IntentService的語境。

希望有幫助!

+0

如果您的IntentService處於不同的進程中,您仍然可以使用ResultReceiver嗎?我的意圖服務需要處於不同的過程中。如果我將我的ResultReceiver放入用於啓動服務的Intent中,IntentService在解組Intent中的extras時拋出ClassNotFound異常。 – John 2017-03-23 16:28:45