當我處於子活動中時,任務殺手會殺死應用程序,如果我重新啓動應用程序,它會從子活動和崩潰開始。 如何在應用程序重新啓動時從根活動開始而不是從子活動開始?如何在應用程序重新啓動時從根活動開始,而不是從子活動開始?
回答
要做到這一點,最簡單的辦法就是
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;
我沒有嘗試,因爲我發現崩潰的原因。但我認爲第二種方法是有效的。 – user3152056
這可能會實現: 在你的子活動的的onStop和的onDestroy,把下面的代碼
Intent intent = getIntent();
intent = null;
此答案無用。當應用程序進程被終止時,它被終止。它不再存在。 'onStop()'和'onDestroy()'不會被調用。當用戶再次啓動應用程序時,Android會記住哪個活動處於頂部並重新啓動該活動。這是正常的,你的答案不會改變這一點。 –
@DavidWasser:David android重新啓動該活動,但它以相同的意圖重新啓動活動。這就是爲什麼我認爲這可以工作。是的,你可能是對的onDestroy可能不會被調用,所以寫這兩行的位置可能不同,這就是我的想法。如果你可以在android殺死一個活動時分享生命週期的更多細節。 – theJango
當你像這樣調用'getIntent()'時,它將一個名爲'intent'的局部變量設置爲對'Intent'的引用。然後,您將此局部變量設置爲null。你認爲這將完成什麼? –
- 1. 從應用程序重新啓動的主要活動開始
- 2. 從開始開始活動
- 3. 活動未開始;另一項活動是開始而不是
- 4. 如何從singleInstance活動開始活動?
- 5. 活動圖重構 - 應從初始活動開始?
- 6. 從線程開始活動
- 7. 從服務開始的Android開始活動,但不啓動應用程序的其他活動
- 8. 開始活動在移動重啓
- 9. 開始新的子活動從的ListView
- 10. 開始活動,而在活動創建
- 11. 如果從其他活動開始活動,則啓動方法
- 12. 重置活動堆棧而不開始新活動
- 13. 從非活動開始活動
- 14. 每次啓動應用程序時開始活動
- 15. Android。如何開始活動而不創建新活動?
- 16. 如何強制Android始終從啓動器活動開始
- 17. 更改Android開始活動後,應用程序不會啓動
- 18. 從片段的意圖開始活動開始空白活動
- 19. 如何不從通知開始活動
- 20. 不開始新的活動
- 21. 如何從tabview中的列表活動開始新的活動
- 22. 如何從集成的google api開始新的活動活動
- 23. 從應用程序啓動而不是活動啓動服務
- 24. 不是從意圖開始活動
- 25. 從LockScreen開始活動
- 26. 從活動開始片段
- 27. 從通知開始活動
- 28. 從活動開始BroadCastReceiver
- 29. 從活動開始DialogFragment
- 30. 從RemoteViewsFactory開始活動
請儘量閱讀清單文件,並檢查您使用<意圖過濾器> <操作機器人:名字=「機器人.intent.action.MAIN「/> intent-filter>在您的根活動標籤內。 –
Srinivasan
我已經這樣做了。 – user3152056