在 AndroidManifest.xml 中為 Activity 設定 android:launchMode,控制實例創建與復用行為。
| 模式 | 行為 | 適用場景 | 生命週期 |
|---|---|---|---|
| standard (預設) | 每次啟動**新建實例**,疊加棧頂 | 普通頁面、列表詳情 | 完整走 onCreate→onDestroy |
| singleTop | 若實例已在棧頂,**復用並觸發 onNewIntent** | 通知點擊進入聊天頁、搜尋結果頁 | 不走 onCreate,走 onNewIntent→onResume |
| singleTask | 任務棧內**單一實例**,啟動時清除其上所有實例 | 主頁、入口頁、登錄後首頁 | 同 singleTop |
| singleInstance | **獨佔任務棧**,全系統僅一實例 | 極少用(來電、鎖屏介面) | 同 singleTop |
<activity
android:name=".MainActivity"
android:launchMode="singleTop" > <!-- 或 singleTask -->
</activity>
singleTop:若從列表頁 A 跳轉詳情頁 B,再從 B 返回 A,**A 不重建**,觸發 onNewIntent 可刷新數據。singleTask:若 A 為主入口,任何入口跳回 A 都**清空棧上頁面**,確保唯一實例。// 單次啟動表現為 singleTop
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
// 清空目標之上的 Activity(類 singleTask 效果)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// 完全重新建立任務棧(如登出後跳登錄頁)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
你提到的「兩個列表頁切換不刷新」本質是**同一個 Activity 內的視圖切換**,用 Fragment + ViewPager 或 FragmentTransaction.hide/show 才是正統做法:
setUserVisibleHint/onHiddenChanged 控制加載邏輯。launchMode 控制 Activity 實例復用,可解決「跳轉不重建」。但若是「同功能不同分頁切換」,**請直接使用 Fragment**,這才是 Android 官方推薦的 UI 組合模式,別讓 Activity 背負不屬於它的責任。