2013-01-02 12 views
4

更多關於這個問題。這個意圖是用來創造一個活動棒嗎?

我想知道如果我沒有殺死它,創建活動的意圖中傳遞的數據是否保留在附近。

示例: 活動A使用額外數據String(SomeStringValue)調用活動B. 然後活動B調用C調用D.現在在這段時間某處活動B被銷燬(例如爲了節省內存),當我回到活動B時需要重新創建它(例如再次調用onCreate),但因爲我有使用後退按鈕而不是傳遞意圖,我的以前的意圖仍然在那裏,我可以得到我需要的數據或將數據消失。

我試圖自己測試但我無法繼續創建被再次調用沒有殺死整個應用程序。

+0

要測試這一點,請轉到開發人員選項,並選中「不要保留活動」選項。請記住要關閉它,因爲許多應用程序都會中斷。如果以後沒有人回答,我會爲你驗證。 –

+0

如果您在活動中沒有做特別的事情,那麼重新創建它的一種簡單方法是更改​​設備的方向(例如,從縱向到橫向)。 – Henry

+0

@Mikedg不要讓活動像你在殺死他們一樣嗎? (因爲某些按鈕如back和「home」(這是一個使用onActivityResult返回第一個活動的按鈕) – Raigex

回答

11

正如上面提到的,我通過進入開發人員選項測試這一點,打開「不要保持活動」。

使用這種方法,我發現當一個活動從內存中移除時,原始意圖被維護。

當我離開活動時立即調用onDestroy。當我回到原始活動onCreate被調用與最初發送的Intent中相同的值。

以下代碼被用作我的測試平臺。

public class MyActivity extends Activity { 
/** 
* Called when the activity is first created. 
*/ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    String extra = getIntent().getStringExtra("test"); 

    ((TextView) findViewById(R.id.test)).setText(extra); 
} 

public void onClick(View view) { 
    Intent i = new Intent(this, MyActivity.class); 
    i.putExtra("test", ""+Math.random()); 
    startActivity(i); 
} 

@Override 
protected void onDestroy() { 
    Log.d("Test", "onDestroy"); 
    super.onDestroy(); //To change body of overridden methods use File | Settings | File Templates. 
} 

}

因此,要回答你的問題,節省了意向書數據是多餘的onSavedInstanceState。你應該保存任何改變或需要保留但不能永久保存的東西。

+0

感謝您的信息。我也嘗試過使用kill activity,並且在saveInstanceState時崩潰,但如果我沒有使用它,則不會崩潰。 – Raigex

+0

保存我的時間:) –

0

如果onDestroy()方法被調用,有chanse所有意圖的數據將被...遊離缺失,你需要重寫onSaveInstanceState()方法你意圖的數據有一個通... ...之後,在onCreate()只是檢查該saveInstaceState束爲空或不...

這應該讓你確定所有的演員將被保存,不管發生什麼事......

+0

如果調用了onDestroy(因爲這通常意味着我希望活動結束),所以我並不擔心。是一個活動被殺死釋放一些內存,我也已經使用onSaveInstanceState()只是想知道如果使用onSaveInstanceState是多餘的,當使用意圖或不。 – Raigex

+0

通常它是...) –

+0

你也可以嘗試使用'onLowMemory()'方法,但我不確定它是否正常工作... –

相關問題