2013-07-15 103 views
1

如果有任何靜態變量被銷燬,它們全部被銷燬了嗎?這是我在我的OnCreate方法的代碼:如果有任何靜態變量被銷燬,它們全部被銷燬了嗎?

if (!LoadedData) 
{ 
    LoadedData = true; 
    SaveData = getSharedPreferences(FILENAME, MODE_PRIVATE); 
    LoadData(); 
    if (MainActivity.ScreenWidth == 0 && MainActivity.ScreenWidthLandscape == 0) 
     MainActivity.LoadData(); 
} 

第一次我的班運行,LoadedData將有假的默認值,造成保存在加載和保存在靜態變量的任何值。設備旋轉後,此代碼將不會運行,因爲所有需要的值都保存在靜態變量中,所以再次加載它們效率不高。問題是,如果一些靜態變量被破壞,但不是全部,那麼我的程序可能會崩潰。當靜態變量被銷燬時,它們是否會保存默認值?例如integer = 0,boolean = false等。

我無法測試被銷燬的靜態變量。

回答

1

檢查一個類的靜態變量會告訴你該類是否已被銷燬。這意味着您可以知道該類別中的其他變量是否仍然正常。它不會告訴你其他類中的其他靜態變量。

如果LoadedData已經被銷燬,那將是因爲沒有任何東西指的是包含它的類。課程已經完成並收集垃圾。當系統重新加載時,整個班級將被重新初始化。

+0

完美!我的代碼會正常工作,因爲'LoadData()'只加載當前類的靜態變量,並且當'MainActivity'中的靜態變量被銷燬時,這將返回true:if(MainActivity.ScreenWidth == 0 && MainActivity.ScreenWidthLandscape == 0)'。我只需要將該檢查移至此行之前:'if(!LoadedData)'。謝謝你的幫助 –

0

當您的設備被Android旋轉或銷燬時,您的整個應用程序將被銷燬,並且所有變量都需要重新初始化。

+0

當我的設備旋轉時,靜態變量保持不變。我有我的程序完美的輪換工作。問題是,如果我的應用程序中斷並且手機內存不足,則靜態變量可能會被破壞。檢查我的一個靜態變量的值是否足以確定它們是否已被銷燬?如果靜態變量LoadedData已被銷燬,我的所有靜態變量是否都有其默認值,包括MainActivity.ScreenWidth和MainActivity.ScreenWidthLandscape? –

0

我不認爲完整的應用程序會被破壞。我認爲它只有活動。然後,該活動重新啓動。

給你的變量。如果它們是你類的成員變量,那麼如果類完成(被破壞)它們將被銷燬。 否則(變量不是任何類的成員)可能會考慮將它們作爲類變量,因爲全局變量不是好代碼。

+0

我所有的靜態變量都是類變量。我讀過幾個不同的來源,當應用程序中斷並且內存變得很低時,靜態變量可能會被破壞。問題是我有一種情況需要編碼,無法測試。 –

相關問題