当前位置: 首页 > news >正文

Android 分析 Activity 与 Fragment 的区别,部分使用的差异

一、基本概念

  • ActivityActivity 是应用中单独一个界面的一个组件,通常一个 Activity 对应一个界面(或屏幕)。Activity 控制了一个应用界面的生命周期,并且能够处理用户的输入和交互。

  • FragmentFragment 是一种可以嵌套到 Activity 中的 UI 组件。一个 Fragment 可以视为一个更小的界面模块,它需要依附于一个 Activity 进行存在。一个 Activity 可以包含多个 Fragment,并且一个 Fragment 也可以在不同的 Activity 中复用。

二、生命周期的差异

  • Activity 生命周期Activity 的生命周期由一系列的回调方法管理,主要包括 onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy() 等。

     
    public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overrideprotected void onStart() {super.onStart();}@Overrideprotected void onResume() {super.onResume();}
    }
    

  • Fragment 生命周期Fragment 的生命周期也由多个回调方法控制,但它的生命周期与宿主 Activity 紧密耦合。常见的生命周期方法包括 onAttach(), onCreateView(), onActivityCreated(), onStart(), onResume(), onPause(), onStop(), onDestroyView() 等。

     
    public class MyFragment extends Fragment {@Overridepublic void onAttach(Context context) {super.onAttach(context);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {return inflater.inflate(R.layout.fragment_layout, container, false);}@Overridepublic void onResume() {super.onResume();}
    }
    

三、功能和职责

  • Activity
    • Activity 是用户交互的入口点,通常是一个完整的屏幕。
    • 管理应用的窗口,控制应用生命周期。
    • 承载和管理 Fragment
    • 一个应用可以包含多个 Activity,每个 Activity 实现不同的功能。
  • Fragment
    • Fragment 是一个可以嵌套在 Activity 中的模块,可以包含自己独立的布局、生命周期和行为。
    • 主要用于实现更灵活的 UI 设计,例如:单页面和多页面的切换,或者在不同的屏幕大小上进行自适应布局。
    • 一个 Activity 可以包含多个 Fragment,每个 Fragment 可以包含自己的 UI 和业务逻辑。

四、嵌套与复用

  • Activity

    • Activity 之间一般是互相独立的,无法嵌套在其他 Activity 中。
    • 通过 Intent 进行相互跳转。
    • 每次启动一个新的 Activity 都是一个全新的 UI,不能轻易复用。
  • Fragment

    • Fragment 可以嵌套在 Activity 中,一个 Activity 可以包含多个 Fragment
    • Fragment 可以在不同的 Activity 之间复用,这是 Fragment 的一个重要特点。可以通过 FragmentTransaction 来动态管理 Fragment 的显示和隐藏。
    • Fragment 适合于开发支持多种屏幕大小的应用,尤其在平板设备中使用非常方便。

五、交互方式

  • Activity 之间的交互

    • Activity 之间的通信一般通过 Intent 实现,数据可以通过 Intent 中的 Extras 传递。
    • Activity 中启动另一个 Activity,通过 startActivity()startActivityForResult() 来实现。
     
    Intent intent = new Intent(this, AnotherActivity.class);
    intent.putExtra("key", "value");
    startActivity(intent);
    

  • Fragment 之间的交互

    • Fragment 之间的交互通常通过宿主 Activity 来进行,或者通过 Fragment 之间的直接调用来实现。
    • Activity 可以通过 getSupportFragmentManager() 来获取和管理 Fragment,并且通过接口回调来传递数据。
     
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_container, new MyFragment());
    transaction.commit();
    

六、UI 设计

  • Activity

    • Activity 的 UI 是通过 setContentView() 方法来设置的,通常一个 Activity 对应一个完整的界面。
    • Activity 更适合用来承载较大的界面,通常它充当了一个独立的界面容器。
  • Fragment

    • Fragment 的 UI 是通过 onCreateView() 方法来创建的,它可以独立于 Activity 存在。
    • Fragment 更适合用来管理和显示小的 UI 模块,多个 Fragment 可以共享同一个 Activity 的界面。

七、性能和内存管理

  • Activity
    • Activity 生命周期较为简单,内存管理相对容易,但由于它占据的是一个单独的栈空间,多个 Activity 的管理和启动可能会造成较大的内存开销。
  • Fragment
    • Fragment 具有较低的内存开销,因为它是附属于 Activity 的一个模块,可以共享宿主 Activity 的内存空间。
    • 通过 FragmentTransaction 动态地管理 Fragment 的显示和隐藏,可以避免一次性加载多个页面,提高性能。

八,使用样例

点我跳转下一篇

九、总结

特性ActivityFragment
生命周期独立生命周期,由系统管理依赖于宿主 Activity 的生命周期
职责代表一个界面,处理大部分 UI 逻辑代表界面的一部分,可以多次复用
嵌套无法嵌套可以嵌套在 Activity 中,也可以在多个 Activity 中复用
UI通常是一个完整的界面通常用于处理界面的一部分,可以多次复用
交互通过 IntentstartActivity() 进行跳转通过宿主 Activity 或接口回调进行交互
性能需要较大的内存开销共享宿主 Activity 的内存,性能更优

总结Activity 更适合用于表示一个独立的、完整的界面,而 Fragment 更适合用于构建可复用的、灵活的界面组件。通过结合使用 ActivityFragment,可以构建出更加灵活和高效的 Android 应用界面。

相关文章:

Android 分析 Activity 与 Fragment 的区别,部分使用的差异

一、基本概念 Activity:Activity 是应用中单独一个界面的一个组件,通常一个 Activity 对应一个界面(或屏幕)。Activity 控制了一个应用界面的生命周期,并且能够处理用户的输入和交互。 Fragment:Fragment …...

前端(Ajax)

1.客户端请求 向https://jsonplaceholder.typicode.com/users发送get请求 const xhr new XMLHttpRequest();console.log(xhr.readyState);xhr.open(get, https://jsonplaceholder.typicode.com/users)console.log(xhr.readyState);xhr.send();console.log(xhr.readyState);xh…...

【C++】约瑟夫环问题:深度解析与高级优化

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言约瑟夫环问题:深度解析与高级优化💯题目描述💯解决方案详解直接模拟法(基于 C 实现)代码解析示例执行过程 💯高级优…...

总结拓展十七:SAP 采购订单行项目“交货“页签解析

《 SAP采购订单行项目“交货”页签字段解析》 在 SAP 系统的采购流程中,采购订单行项目的“交货”页签承载着关键的信息,其中的字段更是对整个交货环节的精准描述和把控的重要元素。理解和正确解析这些字段,对于确保采购流程的顺利进行、优化…...

作业Day2: 多文件编译; 思维导图

目录 ①文件代码 及其所需头文件分析 main.c文件 1.h文件 1.c文件 ②运行结果: ③代码分析 结构体成员 数据类型的设定: 信息录入函数 信息删除 成绩排序 信息显示 自定义初始化函数 ④思维导图:​编辑 ①文件代码 及其所需头文…...

Kioptrix Level 1通关攻略

目录 修改靶机Kioptrix:Level 1 的网络模式 探测靶机IP地址 得到端口信息 扫描TCP端口 扫描UDP端口 脚本扫描 指纹探测 漏洞探测 目录枚举扫描 发现利用脚本 执行exp链接shell 修改靶机Kioptrix:Level 1 的网络模式 Kioptrix: Level 1靶机的默认网络模式是桥接&#x…...

01 下载opencv并配置vs开发环境

01 下载opencv并配置vs开发环境 01 下载windows版本的opencv 下载地址:点击 ​​ WIndows版本的是编译好的代码。 当然国外网站下载很慢,可以通过我分享的网盘链接下载 opencv-4.10.0-windows.exe https://www.alipan.com/s/wV7z4YsmXgN 点击链接保…...

Ubuntu22.04 docker如何发布镜像(和用git差不多)

在dockerhub上创建远程仓库:https://hub.docker.com/ 将本地镜像打tag,并修改成可以上传到 dockerhub 的形式 # 查看本地镜像# 修改镜像 ## docker tag 镜像名称:标签 新的镜像名称(要和远程仓库dockerhub上的一致):新的标签pus…...

【Golang】——Gin 框架中的模板渲染详解

Gin 框架支持动态网页开发,能够通过模板渲染结合数据生成动态页面。在这篇文章中,我们将一步步学习如何在 Gin 框架中配置模板、渲染动态数据,并结合静态资源文件创建一个功能完整的动态网站。 文章目录 1. 什么是模板渲染? 1.1 概…...

React的局限性是什么?

性能: 虚拟 DOM 虽然提高了渲染性能,但在某些情况下可能会造成性能瓶颈,尤其是在处理大量数据或复杂更新时。对于非UI任务(如计算密集型操作),React 本身并不擅长。 学习曲线: 对于初学者来说&a…...

【Vulkan入门】09-CreateFrameBuffer

目录 先叨叨git信息关键代码VulkanEnv::FindHostVisitbaleMemoryTypeIndex()TestPipeLine::CreateFramebuffers() 与网上大多数文章不同,其他文章基本上都使用窗口框架(X11、GLFW、WSL等)提供的surface来显示Vulkan渲染出的图像。我认为那样会…...

罗技键鼠更换新台式机无蓝牙通过接收器安装

优联驱动下载: http://support.logitech.com.cn/zh_cn/software/unifying (下载安装后按照步骤一步步操作,匹配后即可使用) 向京东客服反馈后提供的驱动下载安装连接 有问题欢迎评论沟通~...

深入了解Modbus TCP协议:介绍、原理解析与应用示例

深入了解Modbus TCP协议:介绍、原理解析与应用示例 在工业自动化领域,设备之间的通信与数据交换至关重要。Modbus协议作为一种经典的通信协议,因其简单、开放和易于实现的特点,被广泛应用于各种工业设备之间的数据传输。而Modbus…...

vue2 项目中实现动态代理,服务器上通过nginx部署 实现动态代理

一、前言&&原理 前言:vue2 项目中,请求接口是从表格的当前获取的,也就是接口ip:端口号:路经不确定,要实现点击表格当前行请求对应的接口 实现原理:将实际要请求的ip等信息存在请求头中,用的时候再…...

OpenGL 几何着色器高级应用

几何着色器高级应用 概念回顾 几何着色器(Geometry Shader)是 OpenGL 管线中的可选着色器阶段,位于顶点着色器(Vertex Shader) 和光栅化阶段 之间。 其核心功能是基于输入的图元(如点、线或三角形),生成新的图元,或对输入的图元进行修改。 几何着色器的执行是以图元…...

QT JSON文件解析

参考博客 https://blog.csdn.net/cpp_learner/article/details/118421096 1 打开文件&#xff0c;读取全部内容 QFile file("../Json/js.json"); if (!file.open(QFile::ReadOnly | QFile::Text)) {qDebug() << "cant open error!";return; }// 读…...

c++中string字符串与其他类型的转换

一、string 转换成其他类型 1、转换为整数 使用std::stoi&#xff08;适用于int&#xff09;、std::stol&#xff08;适用于long&#xff09;、std::stoll&#xff08;适用于long long&#xff09;、std::stoul&#xff08;适用于unsigned long&#xff09;和std::stoull&…...

aws(学习笔记第十七课) SQS Amazon Simple Queue Service服务

aws(学习笔记第十七课) SQS Amazon Simple Queue Service服务 学习内容&#xff1a; 使用SQS Amazon Simple Queue Service服务整体代码&#xff08;nodejs的通常工程&#xff09;代码动作 1. 使用SQS Amazon Simple Queue Service服务 利用应用程序来学习SQS 创建S3$ aws s…...

【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(8)

1.问题描述&#xff1a; 在AGC中&#xff0c;推送服务的消息回执新建成功后&#xff0c;有一个有效期 1&#xff0c;这个有效期是什么意思&#xff0c;过期后&#xff0c;会影响什么呢&#xff1f; 2&#xff0c;这个有效期是否可以修改成一直不过期&#xff1f; 解决方案&…...

mysql 的 binlog 原理

binlog的作用:binlog的三种格式Statement-Based Replication (SBR)&#xff1a;Row-Based Replication (RBR)&#xff1a;Mixed-Based Replication (MBR)&#xff1a; 总结&#xff1a;如何选择:如何配置binlog? binlog的作用: 数据恢复: 如果mysql的数据丢失了,又没有备份数…...

Android显示系统(10)- SurfaceFlinger内部结构

一、前言: 之前讲述了native层如何使用SurfaceFlinger,我们只是看到了简单的API调用,从本文开始,我们逐步进行SurfaceFlinger内部结构的分析。话不多说,莱茨狗~ 二、类图: 2.1、总体架构: 先看下SurfaceFlinger的关键成员和我们BootAnimation侧关键成员如何对应起来…...

独家首发 | 基于多级注意力机制的并行预测模型

往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享&#xff01; EMD变体分解效果最好算法——CEEMDAN&#xff08;五&#xff09;-CSDN博客 拒绝信息泄露&#xff01;VMD滚动分…...

Burp suite2 (泷羽sec)

声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章。 笔记只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 这节课旨在扩大自己在网络安全方面的知识面&#xff0c;了解网络安全领域的见闻&#xff0c;了…...

npm或yarn包配置地址源

三种方法 1.配置.npmrc 文件 在更目录新增.npmrc文件 然后写入需要访问的包的地址 2.直接yarn.lock文件里面修改地址 简单粗暴 3.yarn install 的时候添加参数 设置包的仓库地址 yarn config set registry https://registry.yarnpkg.com 安装&#xff1a;yarn install 注意…...

Referer头部在网站反爬虫技术中的运用

网站数据的安全性和完整性至关重要。爬虫技术&#xff0c;虽然在数据收集和分析中发挥着重要作用&#xff0c;但也给网站管理员带来了挑战。为了保护网站数据不被恶意爬取&#xff0c;反爬虫技术应运而生。本文将探讨HTTP头部中的Referer字段在反爬虫技术中的应用&#xff0c;并…...

Next.js授权管理教程:深入掌握Session管理

更多有关Next.js教程&#xff0c;请查阅&#xff1a; 【目录】Next.js 独立开发系列教程-CSDN博客 目录 引言 1. Session管理的基本概念 1.1 什么是Session管理&#xff1f; 1.2 Session与Cookie 1.3 使用Session的优点 2. 在Next.js中管理Session 2.1 使用cookie存储Se…...

Python+OpenCV系列:滤波器的魔力

滤波器是图像处理领域中不可或缺的工具。无论是去除噪声、锐化图像还是提取特征&#xff0c;滤波器都扮演着重要角色。本篇将从简单到复杂&#xff0c;带你快速掌握 PythonOpenCV 中的滤波器使用技巧。 什么是滤波器&#xff1f; 滤波器是一种对图像像素值进行计算、平滑或增强…...

代码随想录算法训练营day41|动态规划买卖股票问题

今天的三题买卖股票问题&#xff0c;实际上解题方法都大同小异&#xff0c;思路也和昨天的树形dp有相似之处&#xff0c;都是用一个dp数组的不同下标来记录不同的状态。其中第一题是只买卖一次&#xff0c;可以用贪心的方法&#xff0c;找出左边的最小值和右边的最大值&#xf…...

【EthIf目录】EthIf的文件结构

ls -R 查看目录EthIf的文件结构&#xff0c;包含四个目录&#xff0c; 一个make file文件&#xff0c;具体如下所示&#xff1a;...

Spring 面试题整理

文章目录 一、控制反转 IoC什么是 Bean 和 Spring Bean&#xff1f;依赖注入的常见方式&#xff1f;Bean 的作用域有哪些&#xff1f;protype bean 里面的依赖是 singleton bean 的话&#xff0c;IoC 容器会怎么处理&#xff1f;Bean 的生命周期&#xff1f;Resource 和 Autowi…...

Converting circular structure to JSON

最近在项目中遇到了这个问题&#xff0c;头疼&#xff0c;弄了一下午才解决。做一个笔记吧。 1 Converting circular structure to JSON 我这个问题大致就是在使用pinia中出现了循环引用&#xff0c;意思是两个或多个模块、对象或依赖之间形成了相互依赖的链条。在使用 Pinia…...

webstorm开发uniapp(从安装到项目运行)

1、下载uniapp插件 下载连接&#xff1a;Uniapp Tool - IntelliJ IDEs Plugin | Marketplace &#xff08;结合自己的webstorm版本下载&#xff0c;不然解析不了&#xff09; 将下载到的zip文件防在webstorm安装路径下&#xff0c;本文的地址为&#xff1a; 2、安装uniapp插…...

企业级包管理器之搭建 npm 私有服务器 (6)

在企业级应用开发中&#xff0c;常常需要处理私有包的发布和管理。搭建 npm 私有服务器是一个理想的解决方案&#xff0c;它不仅能保证代码的私密性&#xff0c;还能提供更快的下载速度和更精细的权限设置。 一、搭建 npm 私有服务器的优势 保证代码私密性&#xff1a;在企业…...

会议通知:人工智能通识教育与实践发展暨和鲸科技AI通识课解决方案发布会

今年秋季学期起&#xff0c;全国多所高校面向本科生开设人工智能通识课。 当前人工智能通识课程的建设进展主要分为三种情况&#xff1a; 全市统筹&#xff0c;由某头部高校牵头建设市级人工智能通识课&#xff0c;以北京市、天津市为代表&#xff1b; 已于秋季学期按照课程…...

windows C#-自动实现属性的轻型类

此示例演示如何创建一个不可变的轻型类&#xff0c;该类仅用于封装一组自动实现的属性。 当你必须使用引用类型语义时&#xff0c;请使用此种构造而不是结构。 可通过以下方法来实现不可变的属性&#xff1a; 仅声明 get 访问器&#xff0c;使属性除了能在该类型的构造函数中…...

汽车零部件设计之——发动机曲轴预应力模态分析仿真APP

汽车零部件是汽车工业的基石&#xff0c;是构成车辆的基础元素。一辆汽车通常由上万件零部件组成&#xff0c;包括发动机系统、传动系统、制动系统、电子控制系统等&#xff0c;它们共同确保了汽车的安全、可靠性及高效运行。在汽车产业快速发展的今天&#xff0c;汽车零部件需…...

C#基础:结构

目录 1. C# 程序结构 示例&#xff1a; 2. 变量和数据类型 示例&#xff1a; 3. 控制结构 条件语句&#xff08;if&#xff09;&#xff1a; 循环语句&#xff08;for 和 while&#xff09;&#xff1a; 4. 函数定义和调用 示例&#xff1a; 5. 数组和集合 数组示例…...

[免费]SpringBoot+Vue疫苗接种预约管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue疫苗接种预约管理系统&#xff0c;分享下哈。 项目介绍 如今的时代&#xff0c;是有史以来最好的时代&#xff0c;随着计算机的发展到现在的移动终端的发展&#xff0c;国内目前信息技术已经在…...

C++50道经典面试题

文章结尾有最新热度的文章,感兴趣的可以去看看。 本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身 导读 作为一种通用且面向对…...

iptables详解

华子目录 什么是防火墙分类netfilter&#xff08;数据包过滤&#xff09;定义netfilter分析内容 防火墙无法完成的任务netfilter策略管理工具netfilter的5类hook函数防火墙规则策略匹配原则iptablesiptables流量处理动作iptables表5种规则表 安装iptablesiptables策略文件 ipta…...

静态链表的构建

前言&#xff1a; 静态链表的概述&#xff1a; 静态链表是一种在数组中模拟链表结构的数据结构&#xff0c;它通过数组的索引来模拟指针&#xff0c;实现节点之间的链接&#xff0c;就不需要使用指针了。每个节点由两部分组成&#xff1a;数据域和游标。数据域用于储存数据&a…...

python3中的身份运算符

一. 简介 本文简单学习一下&#xff0c;python3中的身份运算符。 在Python 3中&#xff0c;身份运算符用于比较两个对象的身份&#xff0c;即它们是否引用内存中的同一个对象。 二. python3 中的身份运算符 1. python3 中的身份运算符 python3 中的身份运算符如下表所示&a…...

Java泛型设计详解

引言 在日常Java开发中&#xff0c;泛型是一个非常重要的特性。它提供了编译时的类型安全检查&#xff0c;增强了代码的可读性和可维护性。然而&#xff0c;对于初学者甚至一些有经验的开发者来说&#xff0c;泛型的使用和理解仍然是一个挑战。本文旨在深入探讨Java泛型的诞生…...

第十九章程序清单合集——Java语言程序设计进阶篇(黑皮书)

目录 程序清单19_1GenericStack 程序清单19_2GenericMethodDemo 程序清单19_3BoundedTypeDemo 程序清单19_4GenericSort 程序清单19_5Max 程序清单19_6MaxUsingGenericType 程序清单19_7wildCardNeedDemo 程序清单19_8AnyWildCardDemo 程序清单19_9SuperWildChardDem…...

el-table组件树形数据修改展开箭头

<style lang"scss" scoped> ::v-deep .el-table__expand-icon .el-icon-arrow-right:before {content: ">"; // 箭头样式font-size: 16px; }::v-deep .el-table__expand-icon{ // 没有展开的状态background-color: rgba(241, 242, 245, 1);color:…...

LabVIEW前面板无法显示的常见原因

当 LabVIEW 前面板显示为白色或黑色时&#xff0c;可能由于控件可视性设置、显卡驱动问题、程序错误或 LabVIEW 设置不当引起。通过检查面板设置、更新驱动、重启程序等方式可有效解决此问题。 遇到前面板无法显示或显示为白色/黑色的情况&#xff0c;可能有以下几种原因。可以…...

PyQt事件机制练习

一、思维导图 二、代码 import sysfrom PyQt6.QtTextToSpeech import QTextToSpeech from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QLineEdit from PyQt6 import uic from PyQt6.QtCore import Qt, QTimerEvent, QTimeclass MyWidget(QWidget):d…...

Android 中,Activity Fragment:如何进行界面跳转、数据传递等

学习笔记 1. Activity 之间的界面跳转和数据传递 在 Android 中&#xff0c;Activity 之间的跳转通常通过 Intent 来完成。Intent 可以携带数据&#xff0c;并传递给目标 Activity&#xff0c;也可以从目标 Activity 返回数据。 从一个 Activity 跳转到另一个 Activity // 在…...

【ubuntu18.04】安装easycwmp出现/usr/bin/ld: cannot find -lubus问题解决方案

错误日志 rootw1804-virtual-machine:/opt/dev/easycwmp# make Making all in bin make[1]: Entering directory /opt/dev/easycwmp/bin gcc -DPACKAGE_NAME\"easycwmpd\" -DPACKAGE_TARNAME\"easycwmpd\" -DPACKAGE_VERSION\"1.8.6\" -DPACKAG…...

可视化建模以及UML期末复习----做题篇

一、单项选择题。&#xff08;20小题&#xff0c;每小题2分,共40分&#xff09; 1、UML图不包括&#xff08; &#xff09; A、用例图 B、状态机图 C、流程图 D、类图 E、通信图 答案&#xff1a;C、流程图 UML中不包括传统意义上的流程图&#xff0c;流程图通常是指B…...