2013-05-18 318 views
7

方面,我想創建一個Singleton類,這將是在我的應用程序的所有點調用。問題是這個類將需要一個操作的上下文。辛格爾頓在Android的

我不想在每個活動中重新創建單例,因爲這樣它就失去了一切意義,所以我想在我的MainActivity中創建它,並使用init方法將上下文作爲參數傳遞。從這一點上,我的辛格爾頓是可用的,但我認爲這是糟糕的設計,因爲這樣我的MainActivity參考總會舉行,因此,我可能會遇到內存泄漏。

我在這兒嗎?

+2

如果我的Singleton對象是靜態的,我手裏拿的上下文的引用,那麼這種情況下是永遠不會被垃圾收集。如果我沒有弄錯,這可能會導致內存泄漏。如果情況並非如此,請在答案上稍微擴大一點。 – MichelReap

+0

內存泄露*複數*?如果它是一個單例,那麼它有一個對其實例變量的引用。這是如何泄漏,即使它是,它將如何實際*重要*? –

+1

好,在這裏我的init我辛格爾頓不停活動中的所有資產將被全部整個應用程序的執行舉行。例如,如果我在那裏有一個很大的形象,它很容易填滿我的記憶,我很快就會用完。 – MichelReap

回答

11

你是對的不主要活動場景保存到,因爲內存泄漏的單。如果你需要在你的單例中使用常量上下文,使用getApplicationContext()。這可以安全地保存。請注意,這個上下文不適用於大多數與gui相關的函數。在極少數情況下,你需要裏面的單身活動水平範圍內,通過調用活動上下文單的方法,但不保存

+0

你的意思是,如果我在我的init使用getApplicationContext()()方法,我不會得到內存泄漏問題,而如果我直接傳遞活動的基準(即初始化(這)),這時候我會遇到麻煩? – MichelReap

+1

@MichelReap'this'不僅僅是一個上下文。 –

+0

好吧,我想那是我失蹤的那一點信息。 – MichelReap