A為根Activity,B、C、D為後續頁面。要求:在B/C/D按返回鍵均直接返回A,而非上一級頁面。已知重寫onBackPressed()可實現,現嘗試用launchMode實現。
| 模式 | 特點 | 典型場景 |
|---|---|---|
| standard | 默認,每次啟動創建新實例,放入調用者任務棧 | 通用頁面 |
| singleTop | 棧頂複用:若目標已在棧頂,不創建新實例,走onNewIntent | 通知欄點擊進入詳情 |
| singleTask | 任務內單例:同一任務棧內僅一實例,啟動時清除其上所有實例 | 主頁、入口頁 |
| singleInstance | 全局單例:獨佔一個任務棧,不與其他Activity共棧 | 系統級單例(如來電界面) |
android:launchMode="singleTask"。android:taskAffinity="com.example.root_task",使它們共享任務棧。singleTask(或singleInstance)。standard。Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP。android:noHistory="true"或finish()noHistory=true,離開即銷毀,返回鍵直接跳回上一級(最終A)。onPause/onStop調用finish()(需區分Home鍵與返回鍵)。方案二最穩健:A作為singleTask入口,子頁面標準啟動並帶CLEAR_TOP標誌。既保證單一入口,又保持正常導航棧語義,避免singleTask帶來的副作用(如實例複用導致數據殘留、動畫異常)。