2015-01-05 155 views
1

當我處於子活動中時,任務殺手會殺死應用程序,如果我重新啓動應用程序,它會從子活動和崩潰開始。 如何在應用程序重新啓動時從根活動開始而不是從子活動開始?如何在應用程序重新啓動時從根活動開始,而不是從子活動開始?

+0

請儘量閱讀清單文件,並檢查您使用<意圖過濾器> <操作機器人:名字=「機器人.intent.action.MAIN「/> 在您的根活動標籤內。 – Srinivasan

+0

我已經這樣做了。 – user3152056

回答

1

要做到這一點,最簡單的辦法就是

android:clearTaskOnLaunch="true" 

添加到activity定義清單爲你的「根」活動(ACTION = MAIN和CATEGORY = DEFAULT)。

但是,如果用戶離開它然後返回到它(即使Android沒有終止您的應用程序的進程),它將始終從頭開始您的應用程序。

執行此操作的更復雜的方法是使用public static boolean變量,該變量設置爲您的「根」活動的onCreate()中的true。如果這個變量是true,那意味着你的「根」活動已經開始。然後,您需要在所有其他活動的onCreate()中測試此標誌,如果該變量爲false這意味着Android會終止您的流程並重新創建它並啓動另一個活動(而不是「根」活動)。在這種情況下,你應該回重定向到你的「根」的活動是這樣的:

Intent intent = new Intent(this, MyRootActivity.class); 
startActivity(intent); 
finish(); 
return; 
+0

我沒有嘗試,因爲我發現崩潰的原因。但我認爲第二種方法是有效的。 – user3152056

-2

這可能會實現: 在你的子活動的的onStop和的onDestroy,把下面的代碼

Intent intent = getIntent(); 
intent = null; 
+0

此答案無用。當應用程序進程被終止時,它被終止。它不再存在。 'onStop()'和'onDestroy()'不會被調用。當用戶再次啓動應用程序時,Android會記住哪個活動處於頂部並重新啓動該活動。這是正常的,你的答案不會改變這一點。 –

+0

@DavidWasser:David android重新啓動該活動,但它以相同的意圖重新啓動活動。這就是爲什麼我認爲這可以工作。是的,你可能是對的onDestroy可能不會被調用,所以寫這兩行的位置可能不同,這就是我的想法。如果你可以在android殺死一個活動時分享生命週期的更多細節。 – theJango

+0

當你像這樣調用'getIntent()'時,它將一個名爲'intent'的局部變量設置爲對'Intent'的引用。然後,您將此局部變量設置爲null。你認爲這將完成什麼? –