2015-05-24 50 views
2

我的應用程序正在後臺線程中解析來自inputStream的數據。根據讀取的數據,它必須將 消息推送到gui。Android:Intent或Handler + listener + runnable?

幾個月前,我做了一個運行這樣的一個implentation:

  • 的activiy實現特定監聽器接口(每個消息類型的一種方法,消息參數將作爲方法的結構參數傳遞) 。
  • 活動在某處註冊偵聽器。
  • 每次閱讀線程推送到活動時,它會創建一個推送到處理程序(在gui線程中創建)的可運行的 。可運行的 在活動線程中執行並調用偵聽器的方法。

那是工作相當順利,但...

幾天前一邊看書,我發現意圖。 Itents可以通過簡單的意圖廣播來代替 該結構,其中活動註冊在所需的 意圖上。

今天,我想知道哪種解決方案最適合在性能方面。 當然,第一個解決方案在類別方面更復雜,但 ,不假定的性能...

任何人有任何線索?

感謝

朱利安

回答

2

我不知道該解決方案將適合最好在性能方面

這取決於你的意思是「一個簡單的意圖廣播」是什麼。

如果你的意思是你在呼喚你的Activity或其他ContextsendBroadcast()registerReceiver(),這將是更糟糕的表現,因爲這涉及進程間通信(IPC),即使廣播和接收器都在同一處理。它也會引發安全問題,因爲系統上的任何應用程序都可以向您發送這些廣播。

如果你的意思,你是對的LocalBroadcastManager單一實例調用sendBroadcast()registerReceiver(),這是沒有問題的,應該是相當的速度,明智的你使用的是什麼。 LocalBroadcastManager實現了進程內事件總線,消除了系統級廣播的開銷和安全問題。

就我個人而言,我會使用另一個事件總線實現,如greenrobot's EventBus,以方便編程。

+0

我打算使用LocalBroadcastManager。 Greenrobot的EventBus很有趣。謝謝。 – Julien

2

您應該知道,如果使用廣播,您將在稍後顯着的時間(例如延遲)收到結果

+0

你有這方面的來源嗎? – Saket

+1

@Saket不,我之前做了一些研究,哪個更好。如果你有幾個聽衆,廣播更好,更容易避免泄漏,但如果你有一個接口,我已經看到使用接口而不是廣播要快得多。 –