2010-12-10 54 views

回答

3

有沒有這樣的事情作爲一個監聽器類型,它只是一個回調接口的命名約定。所以如果你想在同一個線程上同步處理你的事件,你可以使用它們。

然而,處理程序是一個Android類......您可以使用它來將線程引發事件(例如「下載完成」)的消息和可運行子程序傳遞給需要處理它的線程(例如UI線程)。

+0

所以,在簡單的線程應用程序Listener中是更好的解決方案。對? – user479211 2010-12-10 11:07:58

+2

這取決於。你的簡單應用程序可能只有一個線程,但該線程必須保持UI的響應......並且這隻能通過不花時間阻塞線程來完成。所以,只要你的事件處理涉及小而簡單的事情,那麼肯定只是使用回調(偵聽器)。如果您必須執行大量工作和/或等待,請使用另一個線程,或者將工作劃分爲Runnables,這些Runnables可以在單個UI線程上(通過Handler)排隊。 – 2010-12-10 11:29:37

7

這是個好問題!

方案使用一個處理程序

我有我的應用程序運行的是Android後臺服務使用專門的處理程序爲Web通信 - 我決定走這條路,因爲處理程序將請求排隊並執行一個接一個,所以我知道一個序列保持不變。

例如,在即時通訊應用程序中,您可能會發現需要維護聊天順序。

方案使用回調

我的後臺服務也採用了類,從硬件讀取(在一個單獨的線程);一些數據可能隨時進入,需要立即處理。對於那個類我實現了一個監聽器/回調接口。


我唯一的問題是是否有任何處理程序的大小禮儀。 我有大約50個獨特的消息:

  • 傳出web請求由約25個消息的(每個消息是web服務器上的不同API)
  • 每個API返回一個響應,因此還有另一個25進入的卷材 響應

處理程序需要約60%的服務代碼 - 正如您可以想象得到的結果是一個非常大的開關(case {})結構(幾乎1000行代碼)。太大?如何分解它?