Android 跳转清空 Activity

在 Android 开发中,我们经常会遇到需要跳转到新的 Activity 页面的场景。有时候我们希望在跳转时清空之前的 Activity 栈,即将之前的所有页面都关闭,只保留当前的页面。本文将介绍如何在 Android 中实现跳转并清空 Activity 栈的方法。

背景知识

在 Android 开发中,每个 Activity 都有一个任务栈(Task Stack)来管理多个 Activity 的生命周期和顺序。默认情况下,每个应用程序都有一个主任务栈(Main Task Stack),所有的 Activity 都会被加入到这个任务栈中。

当我们启动一个新的 Activity 时,默认情况下,新的 Activity 会被加入到任务栈的顶部,并成为当前的 Activity。而之前的 Activity 会保持在任务栈中,当用户按下返回按钮时,会回到上一个 Activity。

跳转并清空 Activity 栈

为了实现跳转并清空 Activity 栈的功能,我们可以使用以下方法:

Intent intent = new Intent(this, NewActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

在上面的代码中,我们创建了一个 Intent 对象,并指定要跳转的目标 Activity(这里用 NewActivity 作为示例)。然后,我们通过调用 setFlags() 方法设置了两个标志:FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TASK

  • FLAG_ACTIVITY_NEW_TASK 表示要在一个新的任务栈中启动 Activity。如果之前没有任务栈存在,系统会创建一个新的任务栈;如果已经存在任务栈,则会清空任务栈并创建一个新的任务栈。

  • FLAG_ACTIVITY_CLEAR_TASK 表示在启动新的 Activity 之前清空任务栈。也就是说,之前的所有 Activity 都会被关闭,只保留当前的 Activity。

最后,我们调用 startActivity() 方法来启动目标 Activity。

代码示例

下面是一个完整的示例代码,演示了如何跳转并清空 Activity 栈:

// MainActivity.java
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, NewActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                startActivity(intent);
            }
        });
    }
}

// NewActivity.java
public class NewActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);
    }
}

在上面的代码中,我们在 MainActivity 中设置了一个按钮,并在按钮的点击事件中执行了跳转并清空 Activity 栈的操作。点击按钮后,会启动 NewActivity 并清空之前的所有页面。

类图

下面是一个简单的类图,展示了 MainActivityNewActivity 的关系:

classDiagram
    class MainActivity
    class NewActivity
    MainActivity --> NewActivity

流程图

下面是一个简单的流程图,展示了跳转并清空 Activity 栈的流程:

flowchart TD
    A[MainActivity 点击按钮]
    A --> B[创建 Intent 对象]
    B --> C[设置标志 FLAG_ACTIVITY_NEW_TASK 和 FLAG_ACTIVITY_CLEAR_TASK]
    C --> D[启动 NewActivity]

在上面的流程图中,我们从 MainActivity 的按钮点击事件开始,依次经过创建 Intent 对象、设置标志和启动 NewActivity 这三个步骤。

总结

在 Android 开发中,我们可以使用 Intent 对象的 setFlags() 方法来实现跳转并清空 Activity 栈的功能。通过设置标志 FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TASK,我们可以在启动新的 Activity 时清空之前的所有页面。

希望本文对你理解 Android 跳转并清空 Activity 栈有所帮助!