購物 App 流程:商品頁 → 登錄頁 → 註冊頁 → 充值頁。充值成功後需關閉中間所有頁面返回商品頁。且用戶可隨時點擊返回鍵逐級退回,不能提前 finish 中間頁面。
維護一個靜態 List 保存所有啟動的 Activity 實例。提供靜態方法:
addActivity(Activity):在 onCreate 中調用,加入池中。finishActivity():遍歷池中所有 Activity 調用 finish(),清空棧。finishSingleActivity(Activity):關閉指定實例並從池移除。finishSingleActivityByClass(Class):按類名關閉(如關閉登錄、註冊、充值頁)。public class CacheActivity {
public static List activityList = new LinkedList<>();
public static void addActivity(Activity activity) {
if (!activityList.contains(activity)) activityList.add(activity);
}
public static void finishActivity() {
for (Activity act : activityList) act.finish();
activityList.clear();
}
public static void finishSingleActivity(Activity activity) {
if (activity != null && activityList.contains(activity)) {
activityList.remove(activity);
activity.finish();
}
}
public static void finishSingleActivityByClass(Class> cls) {
Activity target = null;
for (Activity act : activityList) {
if (act.getClass().equals(cls)) { target = act; break; }
}
finishSingleActivity(target);
}
}
// 每個 Activity 的 onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CacheActivity.addActivity(this);
}
// 充值成功後
CacheActivity.finishSingleActivityByClass(LoginActivity.class);
CacheActivity.finishSingleActivityByClass(RegisterActivity.class);
CacheActivity.finishSingleActivityByClass(RechargeActivity.class);
// 僅剩 MainActivity 顯示
進階方案:使用 Application.ActivityLifecycleCallbacks 自動管理,或採用單 Activity + Fragment 架構徹底解決。