清除栈顶的Activity并返回到指定的Activity

490 阅读1分钟

在Android开发中,如果你想清除栈顶的Activity,可以使用IntentFLAG_ACTIVITY_CLEAR_TOP标志。这个标志会清除目标Activity之上的所有Activity,并将目标Activity置于栈顶。如果目标Activity已经在栈中,它将被重新创建。

以下是一个示例代码,展示了如何清除栈顶的Activity:

示例代码

假设你有两个Activity:MainActivitySecondActivity。你想从SecondActivity返回到MainActivity并清除SecondActivity

MainActivity.java

package com.example.myapp;

import android.content.Intent;

import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        // 启动SecondActivity

        findViewById(R.id.button_start_second).setOnClickListener(v -> {

            Intent intent = new Intent(MainActivity.this, SecondActivity.class);

            startActivity(intent);

        });

    }

}

SecondActivity.java


package com.example.myapp;

import android.content.Intent;

import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;

public class SecondActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_second);

        // 返回MainActivity并清除栈顶的SecondActivity

        findViewById(R.id.button_return_main).setOnClickListener(v -> {

            Intent intent = new Intent(SecondActivity.this, MainActivity.class);

            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

            startActivity(intent);

            finish(); // 可选,确保SecondActivity被销毁

        });

    }

}

解释

  1. 启动SecondActivity:在MainActivity中,通过点击按钮启动SecondActivity

  2. 返回MainActivity并清除栈顶的SecondActivity

    • SecondActivity中,通过点击按钮创建一个返回MainActivityIntent
    • 使用Intent.FLAG_ACTIVITY_CLEAR_TOP标志,这会清除目标Activity(MainActivity)之上的所有Activity。
    • 使用Intent.FLAG_ACTIVITY_NEW_TASK标志,这会创建一个新的任务栈或使用现有的任务栈。
    • 调用startActivity(intent)启动MainActivity
    • 可选地调用finish()方法,确保SecondActivity被销毁。

注意事项

  • FLAG_ACTIVITY_CLEAR_TOP标志会清除目标Activity之上的所有Activity,但不会销毁目标Activity本身。如果目标Activity已经存在,它将被重新创建。
  • FLAG_ACTIVITY_NEW_TASK标志通常与FLAG_ACTIVITY_CLEAR_TOP一起使用,以确保目标Activity在新的任务栈中运行。

通过这种方式,你可以清除栈顶的Activity并返回到指定的Activity。