如何在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+ 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始
廣告