2014-01-07 27 views
3

的靜態數據成員,我宣佈我的MainActivity類別的靜態成員如下:
Android應用仍然存在Activity類

public class MainActivity extends Activity {  
    public static int logNum = 0; 
    ... 
} 

我遞增的其他方法來這個變量的值。

奇怪的是,當我關閉這個應用程序&再次運行該值沒有初始化爲零,而它需要的最後增加值起..

我Eclipse的模擬器中運行這個。這是模擬器問題嗎?

我不想要解決方案。我明顯可以在onCreate()方法中將變量初始化爲零。只想知道爲什麼?

而我沒有點擊主頁按鈕,而是後退按鈕,也檢查onDestroy()被調用。

+3

將持續到應用過程運行。 –

回答

6

靜態數據仍然存在,直到以下情況之一:

  • 的VM終止。

  • 該過程終止。

  • 該課程被卸載。

現在,據我所知,Dalvik的不會讓你靜的壽命真的綁定到進程的生存卸載類。

即使在活動上調用onDestroy(),進程本身也可以無限期地運行以用於高速緩存目的。當您重新啓動應用程序時,此緩存副本將恢復。

延伸閱讀:http://developer.android.com/guide/components/processes-and-threads.html

現在,代碼已經在從全國各地確實有它一定的異味修改的活動public static變量...

1

靜態變量(與聲明的位置無關)將在活動生命週期的持續時間內存活,並且只會在進程的虛擬機關閉並由系統重新啓動時纔會重置 - 這將在某個時間後發生在啓動狀態下沒有任何活動/服務和與該過程相關的其他組件處於活動狀態。無法保證何時會發生。

2

靜態變量一生

靜態變量與類相關聯,並且只要類在內存才能正常生活,上課時被卸載(這很少發生)破壞。

在Android中,您已經看到,當我們關閉任何應用程序時,它並沒有完全關閉,它仍然在最近的應用程序堆棧中,您可以通過長按Home按鈕(在大多數設備上)來看到它。

的Android本身踢出那些近期的應用,當其他應用程序需要內存

在Android中,靜態變量卸載當 -

  • 強行停止你的應用程序。
  • 應用程序崩潰。
  • 您清除您的應用程序數據。
  • 關閉您的設備。
  • 的Android踢出了近期的應用

感謝塔倫的Droid的來源。

相關問題