2012-07-05 17 views
7

我有一個名爲HomeActivity的活動,它具有SurfaceView並顯示相機預覽圖片。如果您正在啓動/重新啓動它,此活動非常沉重,感覺很慢。onCreate總是在意圖導航時調用

所以我做了一些調查,發現,總是調用onCreate方法。在我看來,如果活動已經開始,這不應該發生?

documentation說: 第一次創建活動時調用。這是您應該完成所有常規靜態設置的位置:創建視圖,將數據綁定到列表等。此方法還會爲您提供一個包含活動先前凍結狀態(如果有的話)的Bundle。 總是跟着onStart()。

這裏是方法,來處理回去:

protected void gotoHome() { 
    final Intent intent = new Intent(SomeOtherActivity.this, HomeActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
} 

編輯:

下面是我離開HomeActivity ...沒什麼特別的:

final Intent i = new Intent(HomeActivity.this, SomeOtherActivity.class); 
startActivity(i); 
+0

確保您沒有完成()HomeActivity時從它開始另一個活動。當你用方法'gotoHome()'返回時,onCreat()會調用 – Egor 2012-07-05 15:09:10

+0

? – 2012-07-05 15:09:15

+0

@Egor我不打完() – Mark 2012-07-05 15:11:27

回答

14

是時,你想返回到HomeActivity,你需要使用這些標誌:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 

下面是從文檔的相關章節的Intent.FLAG_ACTIVITY_CLEAR_TOP:

活動B在上面的例子中當前運行的實例將 要麼接受你是從這裏開始,在其 onNewIntent新的意圖()方法,或者自己完成並重新啓動新的意圖。如果它已宣佈其啓動模式爲「多個」(默認爲 ),並且您沒有將FLAG_ACTIVITY_SINGLE_TOP設置爲相同的 意圖,則它將被完成並重新創建;對於其他所有啓動 模式的FLAG_ACTIVITY_SINGLE_TOP,如果設置了FLAG_ACTIVITY_SINGLE_TOP,則此Intent將被傳送到當前實例的onNewIntent()中 。

+0

非常感謝! Facepalm ...可以自己有這個想法! – Mark 2012-07-05 15:30:50

+0

有時候我會驚奇地發現,在這裏可以多快得到一個有用的答案;-)很高興能有所幫助。 – 2012-07-05 15:31:24

+0

嗨大衛,每當我從孩子的活動回來時,我的活動的創建者都會被調用,你能幫助我嗎? – 2016-09-16 06:45:07