相當長的一段時間,我非常幸福,只要應用程序運行,靜態[實例]變量就存在。然而,令我感到沮喪,並且非常驚慌,我覺得這不是真的。靜態(類)變量的生存期
僅用於測試,我創建了一個靜態的字符串列表,並在我的主activity
類中覆蓋了onDestroy
方法來打印消息以驗證應用程序已退出。在onCreate
方法中,我簡單地添加了一個新的string
,並打印了列表中的內容。我發現的是,列表的大小不斷增加,以前添加的所有字符串值仍然存在。
我讀過的地方[甚至在這裏]實例變量存在,只要應用程序,但我擔心它不是真的如此。
更準確地說,我在使用Facebook SDK for Android時意識到了這個問題。我已經看到SessionEvents
類中聽衆列表中的AuthListener
實例隨着時間的推移而不斷增加。因此,無論何時啓動應用程序並且用戶使用FB登錄,監聽器方法都會觸發多次,因爲SessionEvents
類中存在實例。
有人曾經觀察過這個,有沒有一些主要的錯誤,我承諾瞭解Android的工作原理?
是什麼給出的?
感謝您的閱讀!
[UPDATE]
我支持BalusC
和rdineiu
校正。我真的不想在這裏對實例和類變量產生困惑。唉,我急於發佈我的問題,我犯了一個我不想做的錯誤。我非常清楚static
和instance
變量之間的差異。我只是打算編寫class
變量,並且不能完全弄清楚將靜態變量引用爲instance
變量。
但是,我的問題依然存在。 @MisterSquonk - 不,我不會在這裏混淆關於何時我的Activity
結束以及應用程序被破壞的情況。以下是我在示例中嘗試的內容 - 我只有一個Activity
,它的作用是Main
。當我按下這個Activity
的後退按鈕時,我假設Activity
從堆棧和中被移除,該應用也被破壞。我已經啓動了任務管理器來驗證我的應用程序不再運行。
靜態變量!=實例變量 – BalusC 2011-05-28 19:23:23
與您的問題沒有直接關係,而是參考您所說的內容......「在我的主要活動類中,覆蓋了onDestroy方法以打印消息以驗證應用程序已退出」 - Don'不要將活動與應用程序混淆。殺死活動並不一定會殺死應用程序(「應用程序」)。 – Squonk 2011-05-28 19:48:40
@MisterSquonk - 不,我沒有任何混淆。在我的特定應用程序中,我非常肯定,「活動」的殺死也意味着應用程序不再運行。我使用任務管理器對其進行了驗證,並且更新了帖子以提及相同的內容。 – anirvan 2011-05-28 20:28:12