2012-07-10 142 views
1

在Android中,從Activity A開始,如果我啓動新的Activity B,Android將自動保存Activity A的所有狀態。因此,當我從Activity B點擊或調用finish()時,Activity A將恢復到我開始活動B(例如:活動A中的ScrollView的位置或ProgressBar的值)。在活動A中,我有一個ProgressBar顯示某個任務的進度,然後如果我從活動B返回,ProgressBar將被恢復並繼續運行。Android在調用finish()時如何保存並恢復Activity的狀態?

現在我想要的是,從活動A,我會打電話給finish()。我如何像Android一樣保存Activity A的所有狀態(包括ProgressBar,如上所述),所以當我再次啓動Activity A時,可以像調用finish()之前一樣恢復所有內容,並且我的ProgressBar繼續運行?

我可以將Activity A推送到Android中的堆棧,然後彈出它嗎?任何人都知道如何做到這一點?

回答

2

別叫完成上單擊後退按鈕。

改爲調用方法「moveTaskToBack(false)」。這將'儘量減少'你的應用程序。 下次打開應用程序時,應用程序將以前一狀態打開。

+3

由於操作系統或應用程序可能會終止後臺進程,因此不應嚴重依賴此操作。如果要保留數據,數據仍應保存並傳遞給新實例。 – Eric 2012-07-10 04:52:34

+0

活動A從另一個活動(例如活動Z)開始。因此,當我調用完成時,它將返回到活動Z.現在,在這種情況下,我可以調用moveTaskToBack(false)嗎? – user1417127 2012-07-10 04:53:30

+0

那就是@Soxxeh。使用onSaveInstanceState()和onRestoreInstanceState()是要走的路。moveTaskToBack(false),onSaveInstanceState()和onRestoreInstanceState()的組合應該可以做到。 – Umesh 2012-07-10 04:55:48

0

finish()整點是說你的活動是「完成,應該關閉」。如果你沒有完成,只是不要撥打finish()

+0

即使我不叫光潔度( ),當我從另一個Activity再次啓動Activity A時,如何恢復Activity A的狀態,因爲它將以默認值啓動Activity A. – user1417127 2012-07-10 04:46:01

+2

@ user1417127對不起,我認爲你已經熟悉[Activity lifecycle](http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle),但我不應該這樣做。該鏈接和[這一個](http://developer.android.com/guide/components/activities.html#SavingActivityState)詳細解釋它。短版本是重寫'onSaveInstanceState()'和'onRestoreInstanceState()',但你應該閱讀這些文章的細節。 – 2012-07-10 04:50:29

0

當您從活動A轉到活動B時,Android不會終止活動A.活動A仍位於後臺。但是,如果Android需要內存,它可以在任何時候被殺死。

要保存某個活動的狀態,您必須手動執行該活動。

這裏有一個很好的回答類似的問題:Saving Android Activity state using Save Instance State

+0

雅我知道Android不會殺死Activity A.我的觀點是我可以像Activity一樣保存Activity A嗎?然後,當我從另一個Activity啓動Activity A時,我只需要將其恢復即可 – user1417127 2012-07-10 04:47:58

0

如果你想完成你的活動,然後再次啓動它只是加載一些新的配置,你可以調用,而不是調用完成()活動的重新創建()方法。重新調用()調用將的onSaveInstanceState()和onRestoreInstanceState(),幫助您恢復您先前的配置..

你可以看一下這個答案詳細:How do I restart an Android Activity