2012-12-19 53 views

回答

6

LocalBroadcastManager允許您使用Intent's和IntentFilter's,因此它更容易從系統廣播遷移到本地廣播。它也有一些排隊代碼,可能比你自己的代碼更可靠(或者不是,取決於你實現的複雜程度)。除此之外,它基本上只是將接收器列表保存在內存中,並迭代它們以找到匹配。

另一種方法是使用事件總線,如Square的Otto(基於Guava),它增加了類型安全性,並且效率也一樣。

1

據我所知,LocalBroadcastManager就像一個魅力。它無憂無慮,您可以在Intent中傳遞任何參數,並在Listening過程中將其恢復。唯一的可靠性是廣播經理將意圖放入隊列中。

什麼時候應該使用LocalBroadCastManager? 當您有單一活動(FragmentActivity)和大量片段類時,則在單一活動中擁有localBroadcastManager會更容易。

如果你有很多的活動,那麼使用這可能是有幫助的,但也要記住,你已經在使用意圖來發起新的活動,所以如果有任何掛起的意圖,那麼這個廣播將在隊列中,你需要等待。

所以,最好的使用方法是使用大量片段的單一活動。

+0

我回滾了你的編輯,因爲它應該是一個評論,你的編輯暗示我同意你的答案。活動和片段知道彼此的實例。回調(即使只是所有碎片的通用接口)也比較容易設置(與創建,過濾,註冊,註銷等相比),並且可以在它們之間傳遞任何對象類型。本地廣播更適合您無法訪問其他對象實例的時間(例如服務)。 –