AndroidX中ComponentActivity與原生 Activity 的區別

一、AndroidX 與原生 Activity 的區別

1. 概念與背景
原生 Activity:指 Android 早期(API 1 起)就存在于 android.app 包下的 Activity 類(如 android.app.Activity),是 Android 最初的 Activity 實現,屬于原生 Android 框架的一部分。
AndroidX:是 Google 在 2018 年推出的支持庫(Jetpack 的核心),旨在解決原生庫的版本碎片化問題,統一依賴管理。AndroidX 中的 Activity 位于 androidx.activity 包下(如 androidx.activity.ComponentActivity),是對原生 Activity 的增強和替代。
2. 核心區別

維度原生 Activity(android.app.ActivityAndroidX Activity(androidx.activity.ComponentActivity
所屬體系屬于 Android 原生框架(android.app 包),是傳統 Activity 的基礎類。屬于 AndroidX 庫(androidx.activity 包),是 AndroidX 體系下 Activity 的基礎類。
生命周期組件支持不直接支持 Lifecycle 組件,需手動實現 LifecycleOwner 接口才能使用 Lifecycle 觀察者模式。內置實現 LifecycleOwner 接口,原生支持 Lifecycle 組件,可直接通過 getLifecycle() 管理生命周期觀察者(如結合 ViewModel、LiveData)。
Fragment 支持僅支持原生 android.app.Fragment(已被廢棄),且功能有限、兼容性差。本身不直接處理 Fragment,但作為 FragmentActivity 的父類,間接支持 AndroidX 中的 androidx.fragment.app.Fragment(現代 Fragment 體系)。
擴展功能僅提供基礎生命周期和系統交互能力,無內置現代開發特性(如 DataBinding、權限請求簡化等)。集成多種 AndroidX 擴展能力,例如:
- 支持 ActivityResultContract 簡化權限和Activity結果處理
- 內置 SavedStateRegistry 管理狀態保存與恢復
- 兼容 Jetpack Compose(通過 ComponentActivity.setContent())。
繼承關系定位是原生框架中所有 Activity 的根父類(如 ListActivityTabActivity 等,多已廢棄)。是 AndroidX 體系中 Activity 的頂層父類,AppCompatActivityFragmentActivity 等均直接繼承自它。
兼容性僅依賴系統版本,高版本 API 無法向下兼容低版本設備。通過 AndroidX 庫的適配層,可在低版本設備上使用高版本 API 特性(如在 API 21 以下使用 Lifecycle)。
官方維護狀態僅接收 bug 修復,無新功能更新,逐步被 AndroidX 替代。是 Google 官方主推的 Activity 基礎類,持續更新新功能(如 Compose 集成、狀態管理優化)。

二、Context、Activity、FragmentActivity 等的繼承關系

  1. 核心類的繼承樹
    以下是 Android 中與界面相關的核心類的繼承關系(從頂層到具體實現):
java.lang.Object
├─ android.content.Context                // 上下文基類,提供系統資源訪問、組件交互能力
│  ├─ android.content.ContextWrapper      // 上下文包裝類,用于擴展 Context 功能
│  │  ├─ android.view.ContextThemeWrapper // 支持主題的上下文包裝類(為界面元素提供主題)
│  │  │  ├─ android.app.Activity          // 原生 Activity(android.app 包)
│  │  │  │  └─ androidx.core.app.ComponentActivity  // 早期 AndroidX 過渡類(已廢棄)
│  │  │  └─ androidx.activity.ComponentActivity     // AndroidX 核心 Activity 基類
│  │  │     ├─ androidx.fragment.app.FragmentActivity // 支持 Fragment 的 Activity
│  │  │     │  └─ androidx.appcompat.app.AppCompatActivity // 兼容 ActionBar 的 Activity(最常用)
│  │  │     └─ ...(其他 AndroidX 衍生類,如 ComponentActivity 的子類)

三、總結

AndroidX 是原生框架的升級替代:提供更豐富的功能(如 Lifecycle 支持)和更好的兼容性,推薦優先使用。
AppCompatActivity 是當前 Android 開發中實現 Activity 的首選

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

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

相關文章

Spring AI 使用 Elasticsearch 作為向量數據庫

前言 嗨,大家好,我是雪荷,最近在公司開發 AI 知識庫,同時學到了一些 AI 開發相關的技術,這期先與大家分享一下如何用 ES 當做向量數據庫。 安裝ES 第一步我們先安裝 Elasticsearch,這里建議 Elasticsear…

TypeScript 配置全解析:tsconfig.json、tsconfig.app.json 與 tsconfig.node.json 的深度指南

前言在現代前端和后端開發中,TypeScript 已經成為許多開發者的首選語言。然而,TypeScript 的配置文件(特別是多個配置文件協同工作時)常常讓開發者感到困惑。本文將深入探討 tsconfig.json、tsconfig.app.json 和 tsconfig.node.j…

讀書筆記(學會說話)

1、一個人只有會說話,才會有好人緣,做事才會順利。會說話的人容易成功。善于說話的人易成功,而不善說話的人往往寸步難行。我們要把話說得好聽,同時更要把事做得漂亮。或許一句話,一件事,就可能使人生的旅途…

私有服務器AI智能體搭建-大模型選擇優缺點、擴展性、可開發

以下是主流 AI 框架與模型的對比分析,涵蓋其優缺點、擴展性、可開發性等方面。 文章目錄一、AI 框架對比二、主流大模型對比三、擴展性對比總結四、可開發性對比總結五、選擇建議(按場景)六、未來趨勢一、AI 框架對比 框架優點缺點擴展性可開…

OpenCV直線段檢測算法類cv::line_descriptor::LSDDetector

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 該類用于實現 LSD (Line Segment Detector) 直線段檢測算法。LSD 是一種快速、準確的直線檢測方法,能夠在不依賴邊緣檢測的前提下直接從…

Go語言流程控制(if / for)

分支結構package mainimport ("fmt""strconv" )/* 1.順序結構 2.分支結構 3.循環結構 *//* if 條件1 {// 條件1為真時執行的代碼 } else if 條件2 {// 條件1為假但條件2為真時執行的代碼 } else {// 所有條件均為假時執行的代碼 }一種特殊的條件分支結構if…

wx小程序設置沉浸式導航文字高度問題

第一步:在app.json中設置"navigationStyle": "custom"第二步驟:文件的home.js中// pages/test/test.js Page({/*** 頁面的初始數據*/data: {statusBarHeight: 0,navBarHeight: 44 // 自定義導航內容區高度(單位px)},/*** 生命周期函…

C++算法競賽篇:DevC++ 如何進行debug調試

C算法競賽篇:DevC 如何進行debug調試前言一、準備工作:編譯生成可執行程序二、核心步驟:設置斷點與啟動調試1. 設置斷點2. 啟動調試模式三、調試操作:逐步執行與變量監控1. 逐步執行代碼2. 監控變量值變化四、調試結束前言 在算法…

語音大模型速覽(三)- cosyvoice2

CosyVoice 2: Scalable Streaming Speech Synthesis with Large Language Models 論文鏈接:https://arxiv.org/pdf/2412.10117代碼鏈接:https://github.com/FunAudioLLM/CosyVoice 一句話總結 CosyVoice 2 是一款改進的流式語音合成模型,其…

-lstdc++與-static-libstdc++的用法和差異

CMakeLists.txt 里寫了: target_link_libraries(${PROJECT_NAME} PRIVATEgccstdc ) target_link_options(${PROJECT_NAME} PRIVATE -static-libstdc)看起來像是“鏈接了兩次 C 標準庫”,其實它們的作用完全不同:1. target_link_libraries(...…

Redis學習其二(事務,SpringBoot整合,持久化RDB和AOF)

文章目錄5,事務5.1Redis 事務不保證原子性的原因5.2事務操作過程5.3監控6,SpringBoot整合Redis6.1Redis客戶端6.1.1Jedis簡單使用6.1.2Lettuce&Jedis6.2配置相關6.3使用6.3.1使用RedisTemplate6.3.2Redis工具類7,持久化RDB7.1RDB持久化原理7.2觸發機制save命令flushall命令…

springboot項目部署到K8S

java后臺 創建harbor鏡像拉取Secret:kubectl create secret docker-registry harbor-regcred \--docker-server \ #harbor倉庫地址--docker-username \ #harbor 賬號--docker-password \ #harbor密碼-n productionDockerfile FROM *harbor地址*/library/custom-jdk…

【FPGA開發】一文輕松入門Modelsim的基本操作

Modelsim仿真的步驟 (1)創建新的工程。 (2)在彈出的窗口中,確定項目名和工作路徑,庫保持為work不變(如有需要可以根據需求進行更改)。 (3)添加已經存在的文件(rtl代碼和t…

服務攻防-Java組件安全FastJson高版本JNDI不出網C3P0編碼繞WAF寫入文件CI鏈

服務攻防-Java組件安全&FastJson&高版本JNDI&不出網C3P0&編碼繞WAF&寫入文件CI鏈26天 原創 朝陽 Sec朝陽 2025年07月18日 09:23 湖北 標題已修改 演示環境: https://github.com/lemono0/FastJsonParty FastJson全版本Docker漏洞環境(涵蓋1.…

【Python】DRF核心組件詳解:Mixin與Generic視圖

在 Django REST Framework (DRF) 中,mixins.CreateModelMixin、mixins.ListModelMixin、GenericAPIView 和 GenericViewSet 是構建 API 視圖的核心組件。以下是對這些組件的主要方法及其職責的簡要說明,內容清晰且結構化:1. mixins.CreateMod…

HTML+CSS+JS基礎

文章目錄(一)html1.常見標簽(1)注釋(2)標題 h1~h6(3)段落 p(4)換行與空格 br \ (5)格式化標簽 b i s u(6)…

Vue導出Html為Word中包含圖片在Microsoft Word顯示異常問題

問題背景 碰到一個問題:將包含圖片和SVG數學公式的HTML內容導出為Word文檔時,將圖片都轉為ase64格式導出,在WPS Word中顯示正常,但是在Microsoft Word中出現圖片示異常。具體問題表現 WPS兼容性:在WPS中顯示正常&#…

橢圓曲線密碼學 Elliptic Curve Cryptography

密碼學是研究在存在對抗行為的情況下還能安全通信的技術。即算法加密信息,再算法解密出信息。加密分為兩類 1. Symmetric-key Encryption (secret key encryption) 即一種密鑰,加密和解密使用同一密鑰,可相互轉換 2. Asymmetric-key Encry…

wedo牛-----第47節(免費分享圖紙)

夸克網盤:https://pan.quark.cn/s/4b40a8d18979 高清圖紙源文件,需要的請自取

Unity | AmplifyShaderEditor插件基礎(第十集:噪聲的種類+火焰制作-下)

目錄 一、👋🏻前言 二、圓火焰 三、制作梯度 梯度成品預覽 1.GradientSample節點 2.gradient的用法 3.time節點 四、添加顏色 Color節點 五、火焰搖擺 1.X方向的移動 2.Y方向的移動 3.Z方向的移動 4.把xyz組合起來 Panner節點 六、擺放和…