2011-10-04 116 views
2

我有一個服務正在從遠程服務器檢索我在項目開始時啓動的MainActivity的URL。如何在服務完成後通知主要活動?

問題是,我需要這些URL的活動之前運行。

服務在活動第一次啓動時啓動。

一旦檢索到URL,我就把URL放在sharedpreference中。

但是到了發生這種情況時,活動已經加載了默認圖像。 我正在使用適配器來LazyLoad圖像。

如何通知活動刷新自我或刷新BaseAdapter我用於下載服務完成後的圖像?

歡迎任何更好的主意!

回答

1

如果您需要更新ServiceActivity,您應該查看BroadcastReceivers。可以找到here

+0

我對廣播接收機知之甚多。實際上,在鬧鐘啓動後,我使用其中一個來啓動我的服務。這將如何有益? – user856377

+0

從服務中檢索到URL後,請發送包含作爲附加內容存儲的URL的廣播。您可以爲從服務器抓取的每個圖像URL發送廣播,這樣您甚至可以在下載圖像時下載圖像,而不是等待它們全部完成。您的服務將是發送廣播的服務,您的活動將是接收者的服務。 –

+0

你能給我一個你的建議的實現的代碼示例嗎? – user856377

0

我會做的第一件事是擺脫使用Service下載您的圖片網址。相反,只需使用AsyncTask在後臺線程上執行此操作即可。您可以在每個AsyncTask中保留對您的ImageView的處理,並且當圖像完成下載後,您可以在onPostExecute中設置圖像。

+0

我以前使用此方法。唯一的問題是,因爲我將圖像保存在緩存中,我不希望網址佔用時間,並在每次打開活動時都運行。因此,我運行了一項服務,因爲每個週末的URL都會改變,那就是我想要檢索URL的時候。這個問題是。最初,活動在沒有加載任何圖像的情況下啓動,因爲它還沒有URL。第二個問題是我無法在服務完成時通知活動並刷新以獲取適配器中的圖像。 – user856377

+0

緩存是在內存中還是在磁盤上?我建議您在下載完成後將圖像保存到文件中。您可以在下載之前在磁盤上檢查它們,並且不會產生很大的延遲。使用服務是過度的,比你在這裏需要的複雜得多。我不建議搞亂BroadcastReceivers,它只會使複雜的工作變得更加複雜。 –

1

嘗試使用新的Loader類。他們是friggen awesome.http://developer.android.com/reference/android/content/AsyncTaskLoader.html。如果您開發的api級別低於11,則可以使用向後兼容性軟件包。http://developer.android.com/resources/articles/backward-compatibility.html

+0

什麼是AsyncTaskLoader的鏈接> – user856377

+1

http://developer.android.com/reference/android/content/AsyncTaskLoader.html –