2013-09-22 95 views
1

在某些情況下可能會終止任何活動(例如「其他應用程序需要內存」)。在此之後,再次調用onCreate活動生命週期和類屬性

該文件說,在這種情況下,「進程被殺害」。這是否意味着整個活動實例被重新構建並重新構建或僅構建GUI部件?

考慮:

public class MyActivity extends Activity 
{ 
    private SomeClass someProperty = null; 

    @Override 
    protected void onCreate (Bundle savedInstanceState) 
    { 
     super.onCreate (savedInstanceState); 
     if (someProperty == null) someProperty = new SomeClass(); 
     Log.d ("X", someProperty.toString()); 
    } 
} 

somePropertynull活動被殺害後,並配備再次前,或將someProperty仍然是一樣的嗎?

我在問這個,因爲很難模擬「其他應用程序需要內存」的條件。

回答

2

如果您不在onSaveInstanceState()方法中,它將爲空。有關活動生命週期的信息,請參閱Android developer guide

如果您希望someProperty在活動未被正常銷燬時保存(即用戶按BACK按鈕或應用程序調用完成()),則可以覆蓋onSavedInstanceState()方法並保存您想要的任何內容。在上面的教程中有一個更明確的例子。

此外,還有另一個article和另一個article很清楚地解釋活動的生命週期。

希望有幫助。

編輯: 關於當onSavedInstanceState()將不會被調用(即「破壞正常」,這可能是一個令人困惑的表情),這篇文章說,我引述:

如果用戶交互一個活動並按下後退按鈕或者如果調用了活動的finish()方法,則活動將從當前活動堆棧中移除並回收。在這種情況下,不存在實例狀態來保存並且不調用onSaveInstanceState()方法。

如果用戶與一個活動交互並按Home按鈕,則必須保存活動實例狀態。 onSaveInstanceState()方法被調用。如果用戶重新啓動應用程序,它將恢復或重新啓動上次運行的活動。如果它重新啓動活動,它會將包含保存數據的包提供給onRestoreInstanceState()和onCreate()方法。

+0

謝謝。我懷疑我必須經歷保存的實例狀態。 「沒有正常銷燬」是什麼意思?你的意思是說,當活動被破壞時不會調用'onSaveInstanceState',因爲系統決定釋放內存? – Hyperboreus

+0

對不起,令人困惑的表情。事實上,恰恰相反。查看我的編輯細節。 –

+0

謝謝你的負載放大。你知道在活動的情況下會發生什麼情況會被回收,因爲另一個流程會跳到前面(例如打電話),並且由於內存不足,第一個活動將被回收。在這種情況下'onSaveInstanceState'是否被調用? – Hyperboreus