2012-09-11 62 views
6

在我的應用程序中,活動A是啓動器活動,從A稱爲B,從B稱爲C,我有5個以上的活動。在C中,當我按Home鍵時,再次打開我的應用程序,它打開C,這對我來說很好。但是在按下C中的home按鈕之後,當它閒置一段時間並且應用程序被終止時,那麼當我打開我的應用程序時,它會打開C.但是我想打開主要的啓動程序活動。我怎樣才能做到這一點?應用程序在按下主屏幕按鈕後不會打開主要活動android

A> B> C> HOME按鈕>空閒一段時間>應用殺>開放應用> C.

在這種情況下我想打開主活性的,而不是C.

+4

以及你如何認爲該應用程序正在被殺死?這並不僅僅是因爲你的應用在一段時間內處於空閒狀態。如果它從C開始意味着它從未被殺死。只有當設備處於負載和內存不足的情況下,設備纔會自動終止應用程序 –

+1

在ddms logcat中,顯示進程已經死亡。 –

+0

@MhhirShah你有沒有找到解決這個問題的方法? – Shri

回答

-1

按主頁將您從應用切換到主屏幕,同時 讓您的應用在後臺運行。

除了當您的手機在內存等資源上運行不足時,它將開始關閉在後臺運行的應用程序,因此您的手機擁有足夠的資源用於您現在正在嘗試執行的操作。 遊戲常常是手機爲了節省 資源而「殺死」的第一批應用程序,因爲它們通常比其他應用程序使用更多的內存和CPU。 這就是爲什麼有時候你的遊戲暫停運行,有時候 Android已經爲你關閉了它。

+1

這實際上並沒有回答被問到的問題。這應該是一個評論,而不是一個答案。 –

-2

壓在家裏,你還沒有完成活動,它仍然存在stack.only它暫停,所以使用這個。

如果從活動A.andÇ的B調用活動B

A-> B

從A

,並再次B->ç

使用

使用startactivityforresult從B開始的活動結果

並且當你想從C退出然後setResult(即RESULT_OK)並在B中完成C和OnActivityResult()時,檢查是否有r esultcode == RESULT_OK然後再結束B和的setResult(RESULT_OK)爲A.same程序將按照說明完成A.

這將退出您從application.and應用程序將從不啓動從C.

+0

這實際上並沒有解決OP所具有的問題。如果Android殺死他的進程,當用戶返回到應用程序時,它仍然會啓動一個新進程並顯示'C',這不是OP想要的。 –

0

您可以將android:clearTaskOnLaunch="true"放入活動A的清單中,讓啓動器始終轉到該活動。

+0

我知道,但我想打開A只有當應用程序被殺害,不想按下主頁按鈕後總是打開A. –

-2

如果你的應用程序被系統殺死,我不認爲它會從c開始。如果你通過任務殺手應用程序殺死它,那麼它是一個錯誤。強制停止它的應用程序設置,然後檢查。但是,如果殺死任務殺手應用程序,然後從C,如果你回到B,它正在崩潰,然後檢查結果代碼。如果resultcode!= RESULT_OK,那麼你可以在這裏處理你的代碼,並保存應用程序崩潰。如果你還沒有開始你的結果活動,然後在啓動B和C之前完成B和A.

+1

這是錯誤的。如果Android殺死後臺進程,它會記住任務堆棧的狀態以及打開了哪些活動。當用戶返回該任務時,Android會創建一個新的OS進程,並在堆棧**中恢復**頂部「Activity」的狀態。在OP的情況下,它會創建一個'C'的新實例,因爲當用戶將任務放在後臺時,這是堆棧頂部的'Activity'。 –

5

您將需要檢測到Android已經終止了您的進程,然後用戶返回到應用程序(導致Android創建新進程)。我已經描述瞭如何在衆多的答案做到這一點:

https://stackoverflow.com/a/29802601/769265

https://stackoverflow.com/a/27276077/769265

https://stackoverflow.com/a/11249090/769265

+0

David,在第一個答案中,你建議在第一個活動的'onCreate()'中初​​始化一個布爾值。好。 Android殺死進程。用戶再次啓動應用程序。所有先前在backstack中的活動都會被創建並重新放入backstack,這意味着'FirstActivity'的onCreate()也會被調用,這將導致布爾值變爲'true'。所以,每當你檢查布爾值時,它總是「真」。我錯過了什麼嗎? – azizbekian

+2

不,用戶再次啓動應用程序後,只有上次打開的活動被放在堆棧上(在OP的情況下爲Activity C),並調用它的onCreate()。然後用戶導航回B→onCreate()調用B,依此類推。我在我的應用程序中使用了David的解決方案!輝煌的解決方案,謝謝! – Damnum

+2

@azizbekian正如@Damnum所說,當Android創建一個新的OS進程時,它只會從堆棧創建最頂層的Activity。其他活動不會重新創建,直到用戶返回。 –

0

您是否嘗試過爲啓動後,它調用完成一個特定的時間onBackPressed線程和睡眠(),否則停止線程(從調用完成),並獲得相同的活動。

相關問題