2011-05-04 41 views
1

我正在開發一個android應用程序,它每n分鐘從/向Web服務提取/上傳數據。此上傳/下載僅在應用程序運行時完成。但未來這可能會改變。使用什麼:服務或線程

當新數據下載時,我不更新UI。只有當用戶在當前屏幕上時,UI纔會更新(應用程序有多個活動)

我的問題是什麼是解決此問題的最佳方法。 我不認爲服務是正確的方法,因爲它聽起來像一個矯枉過正的(在目前的情況下)。 AlarmManager可能是一個選項。 在服務內部運行線程是一個選項..就像this

任何指針/建議將是偉大的。 謝謝

回答

5

我在我的活動中使用AsyncTask要求.net網絡服務的一些信息,它的工作原理和易於使用。

AsyncTask支持正確和方便地使用UI線程。該類允許執行後臺操作並在UI線程上發佈結果,而無需操縱線程和/或處理程序。

+0

我最初嘗試做同樣的事情。我調用一個線程來連接到我的web服務,它獲取/上傳數據。甚至在下載所有的數據之前,onPostExecute會被執行。你是如何解決這個問題或者有什麼建議的? – jsp 2011-05-05 14:22:02

+1

@Anonymous在doInBackground()中,我執行http get請求,一旦得到響應(使用XML的HTTP 200 OK),然後onPostExecute()將被調用,並使用從XML解析的響應數據。我正在做一些授權,返回的數據很小。 – bob 2011-05-05 21:09:15

+0

爲什麼你不使用類似ksoap的東西,而是使用HttpClient – jsp 2011-05-05 21:47:54

1

那麼,在這種情況下,由於該應用程序已經在運行的時間,要麼工作很好,但可以從應用程序的任何地方調用一個服務,所以這是我將使用該服務的地方線。

如果你想創建線程只用於可以說Main.java,那麼線程將工作正常,這些是我可以看到真正做出任何差異的唯一的東西,他們真的很接近,並且在這種情況下,既沒有提供明確的「正確」答案,但我會選擇服務

0

只需在上傳/下載完成後廣播消息,然後讓接收方啓動服務,然後讓該服務自行停止。你完成了。

這應該完成,如果你不打算輪詢服務器的新信息或任何東西。這種方法主要是一次更新,解釋,完成。等到下一次更新。主要針對大多數情況下的流媒體......但取決於你所得到的。

0

我認爲你提到的所有方法都可以。我個人是這樣的:

  1. 使用AlarmManager喚醒下載服務。當顯示活動時啓動它,當活動隱藏時停止它。

  2. 下載服務應該是短暫的:啓動它進行上傳/下載然後關閉它。

  3. 如果下載服務確實得到了一些新的數據,它會發送一個活動監聽的廣播。