📌  相关文章
📜  从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志. (1)

📅  最后修改于: 2023-12-03 15:06:30.156000             🧑  作者: Mango

从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志

当我们需要从一个应用程序中启动另一个应用程序的 Activity 的时候,需要使用 startActivity() 方法。但是如果我们是在 Activity 上下文之外调用该方法,需要使用 FLAG_ACTIVITY_NEW_TASK 标志。

什么是 FLAG_ACTIVITY_NEW_TASK 标志?

FLAG_ACTIVITY_NEW_TASK 是一个 Intent 标志,用于指示当该 Intent 启动一个新 Activity 的时候,将它置于任务栈的顶部。这个标志通常用于从一个应用程序中启动另一个应用程序的 Activity,因为在这种情况下所启动的 Activity 不在启动它的 Activity 所在的任务栈内。

为什么需要使用 FLAG_ACTIVITY_NEW_TASK 标志?

如果在 Activity 上下文之外调用 startActivity() 方法,系统会抛出一个异常,因为 Activity 上下文是需要在 Activity 生命周期中才有效的。

使用 FLAG_ACTIVITY_NEW_TASK 标志可以创建一个新的任务栈,并将所启动的 Activity 放置在该任务栈的顶部。这样,我们就不需要指定任何 Activity 上下文了。

如何使用 FLAG_ACTIVITY_NEW_TASK 标志?

使用 FLAG_ACTIVITY_NEW_TASK 标志的方法如下:

Intent intent = new Intent(this, TargetActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

其中 this 表示 Activity 上下文,TargetActivity.class 表示需要启动的目标 Activity。

在这个示例中,我们先创建了一个 Intent 对象,然后调用 setFlags() 方法来设置 FLAG_ACTIVITY_NEW_TASK 标志,最后调用 startActivity() 方法启动目标 Activity。