如何在Android中移除Activity堆栈中的Activity?


介绍

在Android应用中,我们经常需要显示许多不同类型的Activity。这些Activity用于执行不同的任务。当我们在Activity之间导航时,我们之前所在的Activity会保留在堆栈中,这会占用系统内存,并可能降低应用程序的性能。为了防止这种情况,我们必须清除Android应用程序的Activity历史堆栈。本文将介绍如何在Android中从历史堆栈中移除Activity。

实现

我们将创建一个简单的应用程序,其中包含两个Activity。当用户从一个Activity导航到另一个Activity时,我们将清除Activity历史堆栈,以便当用户从第二个Activity按下返回键时,他会退出应用程序,而不是返回到之前的Activity。

步骤1:在Android Studio中创建一个新项目

导航到Android Studio,如下图所示。在下面的屏幕中,点击“新建项目”以创建一个新的Android Studio项目。

点击“新建项目”后,您将看到下面的屏幕。

在这个屏幕中,我们只需选择“Empty Activity”(空Activity)并点击“Next”(下一步)。点击“Next”后,您将看到下面的屏幕。

在这个屏幕中,我们只需指定项目名称。然后包名将自动生成。

注意 - 请确保将语言选择为Java。

指定所有详细信息后,点击“Finish”(完成)以创建一个新的Android Studio项目。

项目创建完成后,我们将看到两个打开的文件:activity_main.xml和MainActivity.java文件。

步骤3:使用activity_main.xml

导航到activity_main.xml。如果此文件不可见,请打开此文件。在左侧窗格中导航到app>res>layout>activity_main.xml以打开此文件。打开此文件后,向其中添加以下代码。代码中添加了注释以便详细了解。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical"
   tools:context=".MainActivity">

   <!-- on below line creating a text view for displaying a heading-->
   <TextView
      android:id="@+id/idTVHeading"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_centerInParent="true"
      android:layout_margin="10dp"
      android:padding="4dp"
      android:text="Activity 1"
      android:textAlignment="center"
      android:textColor="@color/black"
      android:textSize="20sp"
      android:textStyle="bold" />

   <!-- on below line creating a button to open a new activity-->
   <Button
      android:id="@+id/idBtnOpenSecondActivity"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_below="@id/idTVHeading"
      android:layout_centerHorizontal="true"
      android:layout_margin="20dp"
      android:text="Open Second Activity"
      android:textAllCaps="false" />     
</RelativeLayout>

说明 - 在上面的代码中,我们创建了一个相对布局作为根布局,并在其中创建了一个简单的TextView,用于显示应用程序的标题。在这个TextView之后,我们创建了一个简单的按钮。在这个按钮的点击事件中,我们将打开我们的第二个Activity。

步骤4:创建一个新的Activity。

为了显示第二个Activity,我们将创建一个新的Activity。要创建一个新的Activity,我们必须导航到app>右键单击它>新建>Activity>空Activity,然后将Activity名称指定为SecondActivity,然后单击“Finish”(完成)以创建一个新的Activity。现在您的Activity将被创建。

步骤5:使用MainActivity.java文件。

导航到MainActivity.java。如果此文件不可见,请打开此文件。在左侧窗格中导航到app>res>layout>MainActivity.java以打开此文件。打开此文件后,向其中添加以下代码。代码中添加了注释以便详细了解。

package com.example.androidjavaapp;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

   // on below line we are creating variable for button.
   private Button openActivity2Btn;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      // on below line initializing variable with id.
      openActivity2Btn = findViewById(R.id.idBtnOpenSecondActivity);
      // on below line adding click listener for our button.
      openActivity2Btn.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            // on below line we are opening a new activity using intent
            Intent i = new Intent(MainActivity.this, SecondActivity.class);
            // on below line starting a new activity
            startActivity(i);
            // on below line calling a finish method which will clear the current activity from the activity history.
            finish();

         }
      });
   }
}

说明 - 在上面的代码中,我们为按钮创建了变量。之后,我们可以看到onCreate方法。这是MainActivity.java文件中加载activity_main.xml文件的默认方法。在这个onCreate方法中,我们使用我们在activity_main.xml文件中指定的id初始化按钮的变量。初始化变量后,我们为按钮添加了一个点击监听器。在按钮的点击监听器中,我们通过Intent打开一个新的Activity,最后我们调用finish方法以从历史堆栈中移除当前Activity并打开SecondActivity作为新的Activity。

步骤6:使用activity_second.xml。

导航到activity_second.xml。如果此文件不可见,请打开此文件。在左侧窗格中导航到app>res>layout>activity_second.xml以打开此文件。打开此文件后,向其中添加以下代码。代码中添加了注释以便详细了解。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".SecondActivity">

   <!-- on below line creating a text view for displaying a heading-->
   <TextView
      android:id="@+id/idTVHeading"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_centerInParent="true"
      android:layout_margin="10dp"
      android:padding="4dp"
      android:text="Welcome to Second Activity"
      android:textAlignment="center"
      android:textColor="@color/black"
      android:textSize="20sp"
      android:textStyle="bold" />

</RelativeLayout>

添加上述代码后,我们只需点击顶部栏中的绿色图标即可在移动设备上运行我们的应用程序。

注意 - 请确保已连接到您的真实设备或模拟器。

输出

在我们的应用程序中,当我们点击按钮打开一个新的Activity时,我们可以看到我们的新Activity已打开,但同时我们也清除了Activity历史堆栈中的当前Activity。当我们从第二个Activity按下返回键时,我们的应用程序将关闭。这是因为我们已从Activity历史堆栈中移除了MainActivity。

结论

在本文中,我们介绍了如何从Android应用程序的Activity历史堆栈中移除Activity。这将有助于我们减少内存消耗并提高Android应用程序的性能。

更新于:2023年3月30日

3K+ 次浏览

开启你的职业生涯

通过完成课程获得认证

开始
广告