標準重啟代碼
Intent intent = getIntent();
finish();
startActivity(intent);
避免動畫閃爍
Intent intent = getIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);
完全重置任務堆疊(如登出後回登入頁)
Intent intent = new Intent(this, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
Flags 對照
| Flag | 效果 |
FLAG_ACTIVITY_NO_ANIMATION | 無轉場動畫 |
FLAG_ACTIVITY_CLEAR_TOP | 若目標已在堆疊,清除其上方所有 Activity |
FLAG_ACTIVITY_NEW_TASK | 在新任務堆疊啟動 |
FLAG_ACTIVITY_CLEAR_TASK | 配合 NEW_TASK 清空新任務堆疊 |
注意
recreate() (API 11+) 也可重建 Activity,但會保留 Fragment 狀態,不如 finish+start 徹底
- 若在
onCreate 中有耗時初始化,重啟會再次執行,考慮用 ViewModel 保留資料