2012-12-10 62 views
2

爲什麼我不應該在活動中使用靜態對象或不要對活動進行靜態調用?活動中的靜態內容

+0

我不覺得這有什麼問題......只要你不放棄的靜態對象的任何東西,這不是在活動靜態的引用,它應該是罰款。 – gsingh2011

回答

3

一個更合理的說法會說是非常謹慎的使用Android的靜態變量。

您可以使用它們,但要知道,你的應用程序能夠而且將會由OS殺害,並重新啓動,當用戶返回到應用程序(即也許從最近的應用程序列表)。這會導致您的應用程序有許多不同的入口點,並且您不能假定靜態變量將被初始化。

例如,設置在應用程序的第一個活動一個靜態變量,並假定它總是會被設置爲一個很大的錯誤。

此外,應謹慎存儲任何有一個活動作爲靜態變量的引用,因爲這趨向於不必要地消耗存儲器的公共源極。例如,將一個View存儲在一個靜態變量中幾乎肯定是一個錯誤,因爲如果不清除,它將阻止整個活動被垃圾回收。

+0

對於爲什麼在一個Activity中設置的靜態變量可以在另一個處於前景時未設置的情況,我一直非常好奇。在發現這個之前,我的印象是靜態成員不會被垃圾收集,我想不出他們可能被刪除的另一個原因。然而......你是對的。他們可以。 (???) – Turnsole

+2

儘管靜態變量確實不會被垃圾收集,但是如果操作系統殺死了整個應用程序以釋放內存,它們可以被重置。這很常見,並且可能會給開發人員帶來許多無法預料的後果,例如,如果用戶使用最近的應用程序列表或後退按鈕,則可以從主活動以外的某個活動啓動應用程序。 – wsanville

1

這是一個普遍的很好的做法,以避免使事情靜態不需要是因爲它們增加了內存泄漏的機會。如果您始終持有對某些數據的參考,GC將無法釋放它。