使用 GuideActivity 啟動後跳轉 HomeActivity,在 HomeActivity 覆寫 onKeyDown 呼叫 System.exit(0) 或 killProcess 卻發現程式只是回到 GuideActivity。原因是 Activity 堆疊未清除,系統會將任務恢復到前一個 Activity。
// HomeActivity
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
android.os.Process.killProcess(android.os.Process.myPid()); // 無效
return true;
}
return super.onKeyDown(keyCode, event);
}
發送 Intent.ACTION_MAIN + CATEGORY_HOME 將應用移至後台,再結束進程:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(0);
在 Manifest 設定 GuideActivity 為 singleTask 或 singleInstance,並在跳轉時加 FLAG_ACTIVITY_CLEAR_TOP:
<activity android:name=".GuideActivity"
android:launchMode="singleTask" />
// GuideActivity 跳轉
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish(); // 結束自己
如此按返回鍵在 HomeActivity 直接 finish() 即可乾淨退出。