2015-09-28 77 views
0

我有一個應用程序需要創建一個會話才能工作。當應用程序通過android.intent.action.MAINandroid.intent.category.LAUNCHER活動(LoginActivity)啓動時,會話創建得很好,存儲在單例類中,用戶導航到MainActivityAndroid是否允許啓動曾經殺死應用程序的任意活動?

現在應用程序往往會崩潰,因爲會話不存在。我認爲這是因爲Android直接開始MainActivity,而之前創建的會話已被終止。這可能是原因嗎?

我是否需要預計我的應用程序會在任何活動中重新啓動?

+0

您可以使用共享首選項來存儲會話相關數據,並在應用程序再次啓動時重新創建會話。 –

回答

2

作爲一個例子(或曾經因爲我沒有測試過這段時間),絕對是這種情況,如果應用程序崩潰,Android的「操作系統」可以在除main之外的其他活動啓動應用程序。

這得到了Android在線文檔的支持,它強調了Android應用程序可以擁有多個入口點的事實,這一點與許多其他系統不同。這可有點在第一混亂:(http://developer.android.com/guide/components/fundamentals.html):

因此,與大多數其他系統的應用,Android應用沒有一個單一入口點(沒有main()函數,例如)。

當一個應用程序中的某個活動可用於從另一個應用程序「調用」時,通常會使用這個選項。

我認爲它可能會有點過分,說它會處於一個任意的活動,因爲我認爲它有一些邏輯 - 例如重新開始發生崩潰的活動,或者從那個點它以前是否由系統關閉應用程序以釋放內存等。

+0

謝謝。該文檔側重於一個應用程序啓動另一個應用程序的活動的用例。和你一樣,我也猜測應用程序會在進程被終止之前的活動中重新啓動(清除內存優先級,不會崩潰)。但是有沒有關於這方面的文件? –

+0

我不確定官方文檔,但有一篇文章通常被提到(它很陳舊,但我認爲它解釋了很好的設計,在這裏有幫助):http://android-developers.blogspot.nl/2010 /04/multitasking-android-way.html。我認爲,這個reddit討論也很有用,因爲它解釋了設計背後的想法:https://www.reddit.com/r/androiddev/comments/20y5uf/system_tries_to_restart_each_activity_in_the/ – Mick

+0

謝謝,我在給定的資源中找到了它:*如果用戶稍後返回到已被殺死的應用程序,則Android需要以與上次看到的狀態相同的狀態重新啓動它,以保留「所有應用程序都在運行」的體驗。這是通過跟蹤用戶意識到的應用程序的部分(活動),並重新啓動他們關於他們最近看到的狀態的信息。* –

相關問題