棧結構:Activity1 → Activity2 → Activity3 (top)
需求:從 Activity3 啟動 Activity1,**將現有 Activity1 移至棧頂**,不創建新實例,且保留 Activity2、Activity3。
| 模式 | 行為 | 不符合原因 |
|---|---|---|
singleTask | 清除 Activity1 之上的所有 Activity(Activity2、Activity3 被銷毀) | 需保留中間頁面 |
singleInstance | Activity1 獨佔新 Task,返回鍵行為異常(從 Activity2 返回跳到 Activity3 而非 Activity1) | Task 隔離導致返回棧混亂 |
**同一 Task 內,非棧頂 Activity 無法被移至頂部而不銷毀其上方 Activity**。Android 任務棧是嚴格的後進先出結構。
<activity android:name=".Activity1"
android:taskAffinity="com.example.task1"
android:launchMode="singleTask" />
<activity android:name=".Activity2"
android:taskAffinity="com.example.task2"
android:launchMode="singleTask" />
<activity android:name=".Activity3"
android:taskAffinity="com.example.task3"
android:launchMode="singleTask" />
// Activity3 中跳轉 Activity1
Intent intent = new Intent(this, Activity1.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
onSaveInstanceState 保存狀態。若業務允許,**改用單 Activity + Fragment/ViewPager** 管理頁面棧,完全由應用層控制導航,避免系統 Task 機制限制。