2011-06-28 59 views
0

在某些情況下,我需要拆除我的應用程序堆棧中的所有活動,並由於配置更改而重新創建它們。我已經完成了這個任務,首先爲每個活動完成調用,然後重新創建堆棧。Android活動撕下重建

要重新創建,我會重新啓動我的根活動。在它的onStart中,我創建了我的第二個活動。在我開始的第二個活動中,我創建了第三個活動。這確實奏效,但我遇到的問題是,在觀看屏幕時,您會看到創建的三個活動中的每一個,並在下一個活動中生成動畫。我想讓這個重建對用戶不可見,並隱藏這些轉換。有誰知道如何做到這一點?

回答

1

當配置更改時,Android已經負責重新啓動活動。

如果您要求所有活動都要重新啓動,即使它們目前不可見(Android會在用戶返回它們時懶惰地執行此操作,並且它們變得可見,如果配置仍然不同點),那麼沒有沒有簡單的方法來做到這一點。我無法想象你想出了任何不會變得醜陋的東西,因爲讓平臺重新開始你的活動,你需要把它變得可見,然後你將閃爍起來。

事情只是不打算這樣工作。這不是你在Android上運行的任何其他應用程序的運行方式,因此如果你深深地感覺到這是你需要做的事情,那麼解釋爲什麼這樣可以告訴你更好的方法來完成你想要什麼。 :)例如,如果你有一堆活動的狀態從根本上被捆綁在一起需要,可以考慮使用片段(或者清理它)。另一方面,如果你只是有一些內部的配置概念,並希望讓你的活動重新開始(比如說在主題之間切換),那麼這裏有一個API,但它只是被添加進來Android 3.0:http://developer.android.com/reference/android/app/Activity.html#recreate()

+0

嗨,感謝您的幫助。當我說配置更改時,我並不是指Android配置更改。我的意思是用戶在我的應用程序中更改了需要拆卸和重建的設置。有了兩種不同的配置,我仍然擁有相同的屏幕,例如主屏幕,設置屏幕等,但內容會根據配置發生劇烈變化。爲了促進這一變化,我使用工廠來開展我的活動。當配置更改時,我想換出工廠,並使用新工廠重新創建所有現有屏幕。 –

+0

@metalideath:「爲了促進這種變化,我使用工廠來開展我的活動。」 - 考慮到您沒有在Android中「製作」*任何*活動,我相信您誤解了這一點。 「使用新工廠就地重新創建所有現有屏幕」 - 如果您願意丟失背堆棧,請使用'Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP「與'startActivity()'用於消除所有其他活動,然後在下次使用時重建。否則,您將需要使用靜態數據成員或其他東西,並在'onResume()'中重新填充您的活動。 – CommonsWare