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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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节点 六、摆放和…