2012-07-11 206 views
2

我有以下的活動:活動實例的生命週期

public class StartActivity extends Activity 
{ 
    String str = "somestring"; 
    int number = "1"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Code here 
    } 
} 

我讀如果活動完全被另一活動遮蔽在Android文檔下述(http://developer.android.com/reference/android/app/Activity.htm升)

,它被停止。它仍然保留所有狀態和成員信息,但是,用戶不再可見,因此其窗口處於隱藏狀態,並且在別處需要內存時通常會被系統殺死。

這是否意味着我的類實例(STR)是「活着」和可用,除非的onDestroy被稱爲或的onPause的onStop被調用後需要記憶?

+0

是的,就是這個意思。 – FoamyGuy 2012-07-11 13:46:25

+0

你爲什麼問?你想要做什麼? – 2012-07-11 14:25:29

+0

這些變量仍然是「活着」,你稱呼它,直到調用完成,或者操作系統決定摧毀它(也許調用的onDestroy()也許不是)。如果你想讓這些變量持續存在,最好將你的活動狀態保存在onPause()方法中,只要你的活動進入後臺就會被調用。 – Joel 2012-07-11 15:49:16

回答

0

如果您的來電者的活動,你叫finish()方法,那麼以前沒有活動的情況下會活着,因爲你已經完成了來電者的活動。所有的實例都將被垃圾收集。

但是,如果您的調用者活動不會調用finish(),那麼該活動將不再可見,但它將出現在由操作系統維護的活動堆棧中。當設備處於類似的情況下內存低,例:如果活動調用攝像頭(這需要豐富的資源),在這種情況下,之前的活動可能會破壞了呼叫者活性(即以前的活動)可能會完成的情況下。

因此,在您的情況下,即使StartActivity不是目前可見的活動,變量仍然存在。

+0

這不完全正確。如果設備內存不足,Android將永遠不會對某個活動調用「finish()」。在這種情況下,Android將會殺了承載該活動的過程中,沒有調用它的任何生命週期方法在所有(即:它不會調用'的onDestroy()' – 2012-07-11 14:24:57

+0

@大衛:我沒有說結束()方法被調用的活動,如果設備處於低內存,我說這將是由操作系統被破壞。 – Shrikant 2012-07-11 14:30:53

+1

你寫**「對方的活動(即以前的活動)可能會在情況下,當設備處於低完畢在內存「**我只是迴應說,這是一個普遍的誤解。 – 2012-07-11 14:33:18