Android Studio:Application 和 Activity的區別

ApplicationActivity 是 Android 中非常重要的兩個組件,它們分別負責不同的生命周期管理和應用的不同層次的操作。

  • Application應用級別的生命周期管理,它在整個應用運行時只有一個實例,負責應用的全局初始化和資源管理。
  • Activity界面級別的生命周期管理,負責單個界面的顯示和用戶交互,具有較短的生命周期,隨用戶操作頻繁變化。

下面是它們的主要區別:

1. 生命周期差異:

Application 類:
  • 生命周期Application 類的生命周期與整個應用的生命周期相同。當應用啟動時,Application 會被創建,并在應用的整個運行過程中存在,直到應用被退出或系統回收。也就是說,Application 的生命周期只會執行一次。

  • 關鍵方法

    • onCreate():在應用啟動時調用,適合進行全局的初始化操作,如初始化第三方庫、全局資源、設置一些全局變量等。
    • onTerminate():當應用退出時調用(但在大部分設備上不會調用,主要用于模擬器)。

    例如:Application 可以用于在全局范圍內維護數據、處理全局配置或管理網絡請求的工具類。

Activity 類:
  • 生命周期Activity 類的生命周期與用戶的交互緊密相關,每次用戶啟動新的 Activity 時,都會經歷一系列生命周期方法的調用。每次 Activity 的創建、暫停、銷毀等都會觸發相應的生命周期方法。

  • 關鍵方法

    • onCreate():當 Activity 被創建時調用,通常用于界面的初始化和數據的準備。
    • onStart():當 Activity 從不可見變為可見時調用,適用于界面的顯示。
    • onResume():當 Activity 即將處于前臺時調用。
    • onPause():當 Activity 失去焦點但仍可見時調用,通常用于暫停動畫、保存數據等。
    • onStop():當 Activity 不再可見時調用,適合釋放不再需要的資源。
    • onDestroy():當 Activity 被銷毀時調用,適合進行資源清理。

    例如:Activity 負責管理用戶交互界面,每當用戶進入該界面時,都會經過 onCreate()onStart() 等一系列生命周期方法。

2. 存在范圍不同:

  • Application:在應用生命周期內只有一個實例,適合存儲全局的數據或狀態。

  • Activity:每個 Activity 實例都有自己的生命周期,適合管理特定界面的數據和狀態。

    例如:在一個應用中,你可能有多個 Activity,每個 Activity 對應不同的界面,而 Application 則是跨整個應用共享的資源。

3. 用途和角色不同:

  • Application:用于管理和維護應用級別的狀態和資源。例如:

    • 全局初始化(如網絡庫、數據庫、依賴注入容器等)。
    • 應用配置(如全局的主題、語言等)。
    • 處理跨 Activity 的數據共享(例如緩存、全局變量等)。
  • Activity:用于展示和管理用戶界面,處理與用戶的交互。每個 Activity 負責顯示一個界面,并管理與用戶的互動。Activity 也會根據用戶的操作響應生命周期方法,決定是否需要更新 UI 或保存數據。

4. 資源管理和性能優化:

  • Application:由于 Application 存在于整個應用生命周期,因此它的資源消耗必須謹慎處理。過多的資源占用可能會影響整個應用的性能。Application 適合初始化一些全局對象,但不應該進行與界面密切相關的操作。

  • Activity:每個 Activity 在用戶進入時才會被創建,且在不再需要時會被銷毀。對于內存消耗大的資源,Activity 在其生命周期內管理得更細致,確保不占用過多的內存。

5. 跨界面通信:

  • Application:通過 Application,你可以在不同的 Activity 間共享數據和狀態。由于它的生命周期貫穿整個應用,所以可以用于存儲全局共享的信息。

  • ActivityActivity 主要處理與用戶交互相關的界面和數據,它與其他 Activity 的通信通常依賴于 Intent 或通過 FragmentViewModel 等其他組件傳遞數據。

6. 銷毀和回收:

  • ApplicationApplication 通常不會被銷毀,除非系統因為資源緊張而回收內存時。在這種情況下,onTerminate() 方法會被調用,但這種情況很少發生。

  • ActivityActivity 是由系統根據用戶的行為進行管理的。用戶按下“返回”按鈕或切換到其他 Activity 時,當前 Activity 可能會被銷毀并回收,釋放資源。

7.1?MyApplication 類:

??Application 類負責全局初始化,只有一個實例,生命周期貫穿整個應用。這里,我們在 onCreate() 中初始化一些全局資源。

public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();// 應用啟動時初始化全局資源Log.d("MyApplication", "onCreate() called - Application has started");}@Overridepublic void onTerminate() {super.onTerminate();// 應用退出時的清理工作Log.d("MyApplication", "onTerminate() called - Application is terminating");}
}

7.2?MainActivity 類:

? Activity 類負責顯示用戶界面,它有多個生命周期方法,比如 onCreate()onStart()onResume()onPause() 等。每當用戶交互時,Activity 的生命周期會發生變化。

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); // 設置界面Log.d("MainActivity", "onCreate() called - Activity is created");}@Overrideprotected void onStart() {super.onStart();Log.d("MainActivity", "onStart() called - Activity is visible to the user");}@Overrideprotected void onResume() {super.onResume();Log.d("MainActivity", "onResume() called - Activity is in the foreground");}@Overrideprotected void onPause() {super.onPause();Log.d("MainActivity", "onPause() called - Activity is about to lose focus");}@Overrideprotected void onStop() {super.onStop();Log.d("MainActivity", "onStop() called - Activity is no longer visible");}@Overrideprotected void onDestroy() {super.onDestroy();Log.d("MainActivity", "onDestroy() called - Activity is being destroyed");}
}

7.3?AndroidManifest.xml 配置:

? ? 需要在 AndroidManifest.xml 文件中聲明 MyApplication 作為 Application 類,并聲明 MainActivity 作為啟動 Activity

<applicationandroid:name=".MyApplication" <!-- 指定使用自定義的 Application 類 -->android:icon="@mipmap/ic_launcher"android:label="@string/app_name"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>

7.4??執行時的日志輸出:

  • 當你啟動應用時,MyApplicationonCreate() 會首先調用,然后 MainActivity 的生命周期方法依次調用。
  • 你可以查看 Logcat 輸出,確認兩個類的生命周期方法被調用的順序。

7.5 日志輸出示例:

? ? ?假設你啟動了應用,首先會看到 ApplicationonCreate() 被調用,然后隨著 MainActivity 啟動,你會看到以下日志:

D/MyApplication: onCreate() called - Application has started
D/MainActivity: onCreate() called - Activity is created
D/MainActivity: onStart() called - Activity is visible to the user
D/MainActivity: onResume() called - Activity is in the foreground

如果你暫停、停止或銷毀 Activity,你會看到以下生命周期方法的調用:

D/MainActivity: onPause() called - Activity is about to lose focus
D/MainActivity: onStop() called - Activity is no longer visible
D/MainActivity: onDestroy() called - Activity is being destroyed

Application 只在應用啟動時創建一次,而 Activity 會隨著用戶操作的不同反復啟動和銷毀。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894807.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894807.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894807.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mac本地體驗LM studio

博主很懶&#xff0c;不愛打字&#xff01; 1、LM studio官網&#xff1a;LM Studio - Discover, download, and run local LLMs 2、下載DMG文件&#xff0c;安裝 3、使用vscode工具&#xff0c;commandshiftH【全局替換功能】&#xff0c;選擇目錄/Applications/LM\ Studio…

SQL Server 數據庫備份指南

SQL Server備份是數據庫維護的日常工作。備份的目的是在發生數據丟失、損壞甚至硬件故障時將數據庫和事務日志恢復到最近的時間點。您可以借助專業的SQL Server備份軟件,操作起來更方便。前提需要安裝SQL Server Management Studio (SSMS)工具。 對于 SQL 數據庫備份,有多種…

我最近在干什么【2】

前言 這系列的上一篇是2024.12.05寫的&#xff0c;現在是2025.02.06&#xff0c;這都兩個月&#x1f914;小久。 不是完整全面的技術分享&#xff0c;話題聚焦個人成長&#xff08;學的技術、了解到的信息、看的書……&#xff09; 方面。文章偏意識流點&#xff0c;單純分享我…

Temperature、Top-P、Top-K、Frequency Penalty詳解

在生成式AI&#xff08;比如ChatGPT&#xff09;中&#xff0c;Temperature、Top-P、Top-K、Frequency Penalty 這些參數用于控制文本生成的多樣性、隨機性和重復度&#xff0c;它們的作用如下&#xff1a; 1. Temperature&#xff08;溫度&#xff09; 作用&#xff1a;控制輸…

4. Go結構體使用

1、結構體的簡介 結構體&#xff08;Struct&#xff09;是編程語言中常見的一種復合數據類型&#xff0c;它將不同類型的數據元素&#xff08;成員&#xff09;組合成一個單一的實體。通過結構體&#xff0c;程序員可以將具有不同類型和性質的信息綁定到一個對象中&#xff0c…

sqlite 查看表結構

在SQLite中&#xff0c;查看表結構通常有以下幾種方法&#xff1a; 使用.schema命令 在SQLite的命令行界面中&#xff0c;你可以使用.schema命令加上表名來查看該表的結構。例如&#xff0c;如果你想查看名為your_table_name的表結構&#xff0c;你可以這樣做&#xff1a; .s…

SpringAI介紹及本地模型使用方法

博客原文地址 前言 Spring在Java語言中一直穩居高位&#xff0c;與AI的洪流碰撞后也產生了一些有趣的”化學反應“&#xff0c;當然你要非要說碰撞屬于物理反應也可以&#xff0c; 在經歷了一系列復雜的反應方程后&#xff0c;Spring家族的新成員——SpringAI&#xff0c;就…

ip地址是手機號地址還是手機地址

在數字化生活的浪潮中&#xff0c;IP地址、手機號和手機地址這三個概念如影隨形&#xff0c;它們各自承載著網絡世界的獨特功能&#xff0c;卻又因名稱和功能的相似性而時常被混淆。尤其是“IP地址”這一術語&#xff0c;經常被錯誤地與手機號地址或手機地址劃上等號。本文旨在…

車載以太網__傳輸層

車載以太網中&#xff0c;傳輸層和實際用的互聯網相差無幾。本篇文章對傳輸層中的IP進行介紹 目錄 什么是IP&#xff1f; IP和MAC的關系 IP地址分類 私有IP NAT DHCP 為什么要防火墻穿透&#xff1f; 廣播 本地廣播 直接廣播 本地廣播VS直接廣播 組播 …

Docker 數據卷(Volume)詳細介紹

Docker 數據卷&#xff08;Volume&#xff09;詳細介紹 1. 什么是 Docker 數據卷&#xff1f; Docker 數據卷&#xff08;Volume&#xff09;是一種用于 持久化數據 和 容器間數據共享 的機制。由于容器的存儲是臨時的&#xff0c;容器刪除后其中的數據會丟失&#xff0c;因此…

wxWidgets生成HTML文件,帶圖片轉base64數據

編譯環境大家可以看我之前的文章,CodeBlocks + msys2 + wx3.2,win10 這里功能就是生成HTML文件,沒用HTML庫,因為是自己固定的格式,圖片是一個vector,可以動態改變數量的。 效果如下: #include <wx/string.h> #include <wx/file.h> #include <wx/ima…

網絡原理一>數據鏈路層協議->以太網協議

目錄 以太網協議的結構&#xff1a;類型&#xff1a;ARP請求應答報文&#xff1a;CRC&#xff1a;MTU: 為什么需要mac地址&#xff1a;mac地址和IP地址的區別&#xff1a; 以太網協議的結構&#xff1a; 以太網是數據鏈路層和物理層的主要協議 源IP&#xff0c;目的IP就不多說…

瘋狂SQL轉換系列- SQL for Milvs2.4

鑒于Milvus仍在不停的迭代新版本&#xff0c;推出新功能&#xff0c;其SDK目前并不穩定。目前其2.4版本的SDK接口已與之前的2.2版本有了較大的差別&#xff0c;功能上也有了一定的調整。為此&#xff0c;我們重新提供了針對[Milvus2.4](https://github.com/colorknight/moql-tr…

售后板子HDMI無輸出分析

問題&#xff1a; 某產品售后有1例HDMI無輸出。 分析&#xff1a; 1、測試HDMI的HPD腳&#xff08;HDMI座子的19pin&#xff09;&#xff0c;測試電壓4.5V&#xff0c;屬于正常。 2、用萬用表直流電壓檔&#xff0c;測試HDMI的3對數據腳和1對時鐘腳&#xff08;板子通過HDM…

【聲音轉文字CapsWriter】聲音隨時轉化為文字,CapsWriter提高工作效率

文章目錄 前言1. 軟件與模型下載2. 本地使用測試3. 異地遠程使用3.1 內網穿透工具下載安裝3.2 配置公網地址3.3 修改config文件3.4 異地遠程訪問服務端 4. 配置固定公網地址4.1 修改config文件 5. 固定tcp公網地址遠程訪問服務端 前言 今天我要給大家安利一個神器——CapsWrit…

使用 Python 編程語言來實現機器學習小項目教程案例

以下是一個簡單的機器學習小項目教程案例,使用 Python 編程語言和 Scikit-learn 庫來實現一個分類任務。我們將使用經典的鳶尾花(Iris)數據集來訓練一個分類器,預測鳶尾花的種類。 項目目標 使用機器學習算法對鳶尾花數據集進行分類,預測鳶尾花的類別(Setosa、Versicolor…

DKG(Distributed Key Generation)協議

一、DKG是什么 DKG(分布式密鑰生成)提供了一種去中心化的方法,使各個參與方在不相互信任的情況下生成共享密鑰,以確保安全通信和多方參與的機密性。 DKG技術的關鍵思想是使用多方計算(secure multiparty computation)和秘鑰共享(secret sharing)的概念。 秘鑰共享 則…

十二、Docker Compose 部署 SpringCloudAlibaba 微服務

一、部署基礎服務 0、項目部署結構 項目目錄結構如下: /home/zhzl_hebei/ ├── docker-compose.yml └── geochance-auth/└── Dockerfile└── geochance-auth.jar └── geochance-system/└── Dockerfile└── geochance-system.jar └── geochance-gateway/…

使用 Docker(Podman) 部署 MongoDB 數據庫及使用詳解

在現代開發環境中&#xff0c;容器化技術&#xff08;如 Docker 和 Podman&#xff09;已成為部署和管理應用程序的標準方式。本文將詳細介紹如何使用 Podman/Docker 部署 MongoDB 數據庫&#xff0c;并確保其他應用程序容器能夠通過 Docker 網絡成功連接到 MongoDB。我們將逐步…

Games104——游戲引擎Gameplay玩法系統:基礎AI

這里寫目錄標題 尋路/導航系統NavigationWalkable AreaWaypoint NetworkGridNavigation Mesh&#xff08;尋路網格&#xff09;Sparse Voxel Octree Path FindingDijkstra Algorithm迪杰斯特拉算法A Star&#xff08;A*算法&#xff09; Path Smoothing Steering系統Crowd Simu…