2014-01-24 43 views

回答

2

LocalBroadcastManager不包括釋放方法。這是否意味着它會自動進行GC編輯?

不,它不會。但它也不一定。

從您在應用程序中的任何位置用拳頭調用該方法的時間點開始,直到您的應用程序進程終止爲止。

A static方法名爲getInstance,它返回您所在類的實例,意味着在大多數情況下您正在處理singleton

單身人士是在整個應用程序中僅存在一次的對象,它們的行爲與全局變量相同(通常被認爲是bad forseveral reasons)。

如果您的代碼中註冊接收廣播的位置使用的廣播管理器不同於發送廣播的廣播管理器,則整個廣播機制將會崩潰。該代碼確保每個人都使用相同的單身人士。

LocalBroadcastManager另一方面不會泄漏您的活動上下文,如果你把它作爲參數。它將調用context.getApplicationContext()來獲取應用程序上下文,該應用程序本身是一個可以永久保持引用的單例。

的代碼創建單的方式,以及如何應對單身上下文中進一步詳細這篇文章中描述:Context, What Context?(注:在一個線程安全的方式 - 在那篇文章中不幸丟失)

+0

這是非常有幫助。謝謝。一般來說,我們如何知道返回的obj是否是單身人士。這是否意味着所有的ClassName.getInstance都應該返回一個單數?例如,(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); –

+2

'getSystemService'返回的也是一個。一個沒有公共構造函數的類,通過其他方法獲得類型的對象通常是這樣設計的:a)不必知道有多少b)不必關心它的生命週期。 'getInstance'是一種慣例。 'newInstance'會每次給你一個新的。之間的任何東西(例如有5個連接對象的連接池)可能也是'getInstance'(並且你不應該永遠保留對這些連接的引用) – zapl

+0

因此,如果我在LocalBroadcastManager上調用getInstance,它不會很昂貴,實際上每次都會創建一個新的,但是隻需重新使用舊的 - 對吧?它不是工廠(?) – JohnyTex