2012-12-11 78 views
-1

我有一個包含2個主要活動的Android應用程序。當應用程序從頭開始時,兩個活動都會啓動並運行得很好。例如:A - > B。活動A完成A & B所需的所有初始化。在創建B之前,我始終創建了(onCreate)所有在真實硬件和仿真器上的本地測試。Android Activity stack onCreate order

但是,在我的應用程序的崩潰報告中,我看到一個異常,只能通過B在沒有或在A之前啓動來解釋。這可能嗎? Android會創建一個內部活動,而不會爲我的應用創建其他活動(B沒有A)?活動創建的順序是否保證(A然後是B)?我將如何使用模擬器或真實硬件重新創建這些場景中的任何一個?

無論首先啓動哪個Activity,我都可以輕鬆地將我的初始化代碼移動到工作位置,但是我想在進行更改之前學習如何重現和測試。我瀏覽了文檔,但它並沒有真正的幫助。

這裏是啓動任務B,當用戶按下代碼「播放」按鈕:

private void handlePlayTouch() 
{ 
    Intent intent = new Intent(getApplicationContext(), PlayActivity.class); 
    startActivity(intent);  
} 
+0

如果您在按主頁按鈕後(也可能在調用onStop()之後恢復應用程序),它將不會恢復活動A的原始狀態。在任何情況下,每個活動都應該是完整的。 – Estel

+0

你怎麼一次開始兩個活動?向我們展示一些代碼! – theomega

+0

當用戶按下一個按鈕時,活動B開始,該按鈕將應用程序從「主屏幕」導航到「主屏幕」。 – raider33

回答

1

後,你開始活動B,你按回家的按鈕,並在你的應用程序 背景。如果可用內存非常低,系統會終止您的應用程序。如果您在應用程序終止後嘗試切換到您的應用程序,系統會嘗試恢復您的應用程序和活動B,而不先創建A。

您可以使用DDMMS的設備視圖來手動停止您的應用程序,並有一個紅色的「停止進程」按鈕。確保您應該在後臺製作應用程序。

+0

我從來沒有聽說過DDMS,所以謝謝你提供的信息。我會嘗試使用它,如果我能重現這個問題,我會接受這個答案。 – raider33

+0

我運行DDMS並能夠像在崩潰報告中看到的堆棧跟蹤一樣重現錯誤。而且,一旦我移動了初始化代碼,現在一切正常。 – raider33

0

在你的情況,我建議你使用一個單一的活動。在創造中,你可以準備好一切,然後做你所需要的。如果你想確定某些事情只有在其他事情完成時纔會執行,請使用AsyncTasks。

在doInBackground =>做初始化和onPostExecute,做你以後要做的事情。

只有在doInBackground完成時,纔會執行onPostExecute。

http://developer.android.com/reference/android/os/AsyncTask.html

編輯:

您的結構是不尊重在Android的一個良好的編程習慣,但如果它是強制性的,你把這個結構,你至少應該用「不可殺死」爲服務活動A.這會讓你的代碼更難作爲一個簡單的活動銷燬,當你的應用程序被放置在背景上時,但仍然有機會被銷燬。

要了解你的問題,看到了Android活動的生命週期:

enter image description here

對於使用服務,請參見:

http://developer.android.com/reference/android/app/Service.html

http://www.androidguys.com/2009/09/09/diamonds-are-forever-services-are-not/

+0

我想保持活動的結構,因爲他們目前是。就像帖子所說,我不介意移動初始化代碼,以便任何一個Activity都可以初始化它自己。主要我想知道如果B可以重新啓動沒有A. – raider33

+0

Oj,請參閱編輯的答案。沒有提供任何代碼,我無法給你更多的細節。 –