調用 startActivity(intent) 時應用崩潰,日誌提示:android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag。
代碼中創建 Intent 時傳入的 this 並非 Activity 類型的 Context。常見場景:
new Intent(this, TargetActivity.class)this 指向外部類實例而非 Activity// 工具類方法簽名
public static void navigateToMain(Activity activity) {
Intent intent = new Intent(activity, MainActivity.class);
activity.startActivity(intent);
}
// 調用處
MyUtils.navigateToMain(MainActivity.this); // 或 this(在 Activity 內部)
Context appContext = context.getApplicationContext();
Intent intent = new Intent(appContext, TargetActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必須添加
appContext.startActivity(intent);
注意:此方式啟動的 Activity 會創建新任務棧,返回鍵行為異於常規跳轉,僅適用於通知欄跳轉、Service 啟動界面等特殊場景。
new Handler(Looper.getMainLooper()).post(() -> {
Intent intent = new Intent(activity, TargetActivity.class);
activity.startActivity(intent);
});
Activity 或 Fragment(使用 fragment.requireActivity())。| 錯誤寫法 | 正確寫法 |
|---|---|
new Intent(this, B.class) (this 為 Service) | new Intent(MainActivity.this, B.class) |
context.startActivity(intent) (context 為 Application) | intent.addFlags(FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent) |