2012-06-01 54 views
0

我只是想看看你們可能會認爲差(在使用,效率,甚至是很好的做法而言)關於Android開發。Vs的應用程序變量靜態變量

如果我在我的一個基本活動中使用了一個靜態變量(因此它的單個實例和訪問無處不在),而不是在我的應用程序子類中使用非靜態變量(這是所有活動的單個應用程序類)。

兩個如果您嘗試使用全局變量會達到同樣的最終結果。

我正在使用靜態的,然後我移動到使用應用程序子類(如果你們想知道「我用的是什麼」),我想播放背景音樂並從任何地方控制它,我不由於某些原因希望使用服務)。

任何幫助澄清的最佳方式?

+0

我想你可能需要閱讀http://stackoverflow.com/questions/2475978/using-static-variables-in-android - 它回答你的問題在我看來。如果你只使用一個靜態變量,它可能比單例類的開銷小,但實際上,在更大的範圍內,它並沒有真正的區別,靜態變量的存在是有原因的 - 如果謹慎使用它們並不是壞習慣。 – Ewald

+0

謝謝,但這回答我是否應該使用靜態或不。我的問題是使用靜態還是應用程序子類,以及將兩者保存在內存中的區別是什麼 – Snake

回答

3

這取決於使用也想,如果你正在使用

android:process 

由於某種原因,你Activity或其他任何東西在你的清單文件的靜態值將被重置,你會得到分配給初始值靜態變量。在這種情況下,您可以使用SharedPreferenceApplication類。

因爲如果你使用android:process針對任何特定的活動則該活動將在另一個進程中運行,因爲我們知道,在Android的每個應用程序在其自身的進程運行。

比這個我沒有看到有使用靜態太大問題

其他。但是,我個人更喜歡Application類,因爲Android具有全局變量。

+0

[生命週期](http://www.javaying.com/2007/01/whats-lifetime-of- variables.html)是通過程序的生命週期,所以靜態值永遠不會被重置。 – Lucifer

+1

@Lucifer Android在我們使用'android:process'的時候會創建一個獨立的進程,所以它會重置它的值。 –

+0

同意Dlavik虛擬機爲每個應用程序創建分離進程。但我不認爲靜態在任何編程語言中改變其行爲,因爲它命名統計。你有沒有與此相關的任何文檔鏈接? – Lucifer

1

一個程序的執行過程中,每個變量具有它自己的時間內,它可以被訪問。這被稱爲變量的生命週期。

  • 實例變量: 實例變量是類成員。每次從類創建對象時,都會爲此對象創建這些實例變量的全新副本。實際上,從一個類創建一個對象意味着部分爲該對象創建實例變量的副本。所以每個對象都有自己的實例變量副本,只要它們所屬的對象存在就存在。這些變量的值構成我們所稱的:對象的狀態。

  • 靜態變量: 靜態變量也是一個類的成員,但不能屬於該類創建任何對象。所以從類創建的對象不會獲得自己的靜態變量副本。因此,只有在運行時加載類時纔會創建靜態變量。靜態變量的存在僅取決於類本身。結果,只要其類存在,就存在一個靜態變量。

一個這兩個變量之間的主要區別是,當你調用System.gc();您的實例變量設置爲null,而static variable will never set to null by calling gc

+0

確認您的信息更有用親愛的Lucifer。如果您允許進入聊天室,我可以在聊天室中瞭解更多詳情嗎? –