2009-12-21 55 views
0

這是情景:Android的後臺工作方案

  1. 用戶有一個用於UI主要活動。
  2. 程序需要與對等方通信並保持連接並等待消息
  3. 當消息到達時,它顯示在主活動中。

所以問題是我應該使用服務的通信和什麼類型的服務?

也應該在服務中使用AsyncTask以保持我的UI響應,爲什麼?

回答

5

這裏重要的是任何CPU密集型工作或阻塞I/O(包括等待傳入的網絡連接)都發生在與主UI線程分離的線程中。

如果您只需要網絡通信在您的活動處於活動狀態時保持運行狀態,那麼請在活動中使用第二個線程。如果即使在您的活動中斷後仍需要維護網絡通信,您仍需要使用服務。

請記住,默認行爲是指服務與同一應用程序(包括提供您的UI的活動)共享相同的進程和線程。出於這個原因,即使你使用服務,你仍然需要產生一個新的線程來獲得所需的效果。

AsyncTask用於在單獨的線程中執行任務,最終會終止並返回結果。如果這聽起來像你的應用程序,然後隨意使用它。但是如果你在一些請求中打開一個端口(意味着你沒有單一的返回值),那麼使用這個類將會成爲一個負擔。

+0

偉大的信息特雷弗。 – 2009-12-22 22:21:55