2017-07-28 169 views
0

我啓動主要活動,更改UI中的一些設置,按回按鈕,然後重新打開活動。 onCreate()被再次調用並且活動回到默認狀態。爲什麼是這樣?singleInstance啓動模式:爲什麼在活動結束前調用onCreate?

我希望只onResume()被稱爲,因爲我有這樣的清單:

android:launchMode="singleInstance" 
+0

按後退按鈕銷燬目前在前面的活動,所以當你打開它應該真的打電話onCreate。 – Enzokie

回答

1

我推出的主要活動,在UI更改了某些設置後,按返回鍵,然後重新打開活動。再次調用onCreate()並且活動回到默認狀態。爲什麼是這樣?

這是活動生命週期的預期行爲。當你按回按鈕,然後活動被破壞,它將從onCreate方法開始。

enter image description here

+0

我的不好。我想我需要重寫'onBackPressed()'並詢問用戶是否真的想退出。否則,他應該使用主頁按鈕。 –

+0

@Primož'c0dehunter'Kralj是的。你可以向用戶詢問他是否想要返回,那麼你必須重寫'onBackPressed' –

1

這是因爲,當你按下回來,這destroyes活動。 我認爲你想要的是當你回到這個活動時保持狀態,而不是真的有它的一個實例。所以你應該保存你需要的信息,然後在onCreate中恢復它們。

單實例僅意味着(如果我記得的話),如果您啓動多個活動而未完成它們,那麼當您調用startActivity()並且不會調用onCreate時,具有singleInstance的實例將返回到前端。但是這意味着你不能通過按回來產生這種行爲。 也許你可以重寫onBackPressed,並開始另一個活動(你應該回去),而不是調用super.onBackPressed()。這應該做你想做的事情,但如果認爲這將是一種難以管理。

順便記住活動可能由系統本身被殺死,所以你不應該依賴於一個事實,即你的活動不被打死

2

嘗試在onBackPressed()使用moveTaskToBack(true);,讓您的當前活動隱藏的,而不是破壞,所以你可以重新打開它

@Override 
public void onBackPresses(){ 
    moveTaskToBack(true); 
} 
+0

我不知道這個方法!但是你仍然必須記住系統可以銷燬這個活動,所以不要依賴它沒有被銷燬的事實 – liltof

相關問題