安卓四大组件之Activity

news2024/10/6 12:33:37

目录

  • 一、简介
  • 二、生命周期
  • 三、启动模式
    • 3.1 Standard
    • 3.2 Single Task
    • 3.3 SingleTop
    • 3.4 Single Instance
    • 3.5 启动模式的配置
  • 四、Activity 的跳转和数据传递
    • 4.1 Activity 的跳转
      • 4.1.1 直接跳转
      • 4.1.2 回调
    • 4.2 Activity 的数据传递
      • 4.2.1 传递普通数据
      • 4.2.2 传递一组数据
      • 4.2.3 传递对象
  • 五、启动过程


一、简介

ctivity是安卓四大组件之一,用于展示用户界面和处理用户交互。每个Activity都会占据屏幕上的一部分空间,并且可以包含各种UI元素,如按钮、文本框、图片等。Activity通常会响应用户的操作,如点击按钮、输入文本等。


二、生命周期

在这里插入图片描述

方法调用时刻使用场景
onCreate()Activity开始创建时(生命周期的第1个方法)初始化工作(如setContentView加载界面布局资源)
onStart()Activity正在被启动时(此时,Activity还不可见(在后台)&还无法与用户交互)
onResume()时刻1:Activity第1次启动完毕。时刻2:当前Activity被挡住1部分后(失去焦点,处于onPause状态),重新回到当前Activity时(Ul最顶层)(如:弹窗消失)数据恢复 & 展示
onPause()Activity 停止时 &仍可见时(如 弹窗出现)数据存储、停止动画、注销广播等操作(注:不能做耗时操作)
onStop()Activity不在U最顶层 & 完全被挡住不可见时回收工作 & 资源释放
onRestart()处于onStop()状态时(不可见)重新回到该Activity(Ul最顶层)数据恢复
onDestory()Activity 即将被销毁时回收工作 & 资源释放

在这里插入图片描述
①进入页面→退出页面:
进入的时候: oncreate->onstart→onresume
退出的时候: onpause->onstop->ondestroy

在这里插入图片描述
在这里插入图片描述

②进入页面→按 HOME 使页面后台运行→返回页面

进入页面: oncreate→onstart→onresume

在这里插入图片描述
进入 HOME,页面后台运行: onpause→onstop

在这里插入图片描述
返回页面: onrestart->onstart->onresume
在这里插入图片描述
退出的时候: onpause->onstop→ondestroy
在这里插入图片描述
③进入页面->finish 返回上层->再次进入->虚拟返回键退出
进入页面: oncreate→onstart→onresume
在这里插入图片描述
finish 返回上层: onpause->onstop→ondestroy
在这里插入图片描述
再次进入: oncreate→onstart→onresume
在这里插入图片描述
虚拟按键退出: onpause->onstop→ondestroy
在这里插入图片描述
③中可得, finish 方法返回所走的生命周期与虚拟返回键的生命周期一致。


三、启动模式

3.1 Standard

在这里插入图片描述
在这里插入图片描述

3.2 Single Task

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.3 SingleTop

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4 Single Instance

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.5 启动模式的配置

在这里插入图片描述


四、Activity 的跳转和数据传递

4.1 Activity 的跳转

主要有以下两种方式

startActivity(Intent intent);
startActivityForResult(Intent intent,int requestCode);

这两个函数,传递数据的话利用 Intent 进行传递,复杂数据需要配合 Bundle 使用。可以
利用这两个函数在 Activity 之间的跳转以及传递数据。

4.1.1 直接跳转

这里有两个 Activity: FirstActivity 与 SecondActivity,从 FirstActivity 中跳转到SecondActivity 中只需要一个 startActivity()即可:

startActivity(new Intent(this,SecondActivity.class));

一般需要在 SecondActivity 中加上 finish()函数,表示这个 Activity 结束,比如这里直接在 SecondActivity 的按钮事件里面加上了 finish():
在这里插入图片描述

4.1.2 回调

很多情况下需要在 FirstActivity 跳转到 SecondActivity 后,在 SecondActivity 进行相应的操作,如更新数据之类,然后返回 FirstActivity,通知 FirstActivity 执行某些操作,这时候就需要使用 startActivityForResult()。
startActivityForResult 有两个参数,一个是 Intent,表示将要跳转的 Activity,一个是requestCode,表示请求码,用于调用 Activity 的 onActivityResult()函数。
如 FirstActivity 中:

startActivityForResult(new Intent(this,SecondActivity.class),11);

这里 11 就是请求码,然后在 SecondActivity 中,使用 setResult()函数:

setResult(22,new Intent().putExtra("str","from second activity"));

setResult()接受两个参数,第一个参数表示 resultCode,从这个 SecondActivity 返回的结果码,另一个 Intent,表示要返回给 FirstActivity 的数据。
最后在 FirstActivity 中重载 onActivityResult():
在这里插入图片描述

4.2 Activity 的数据传递

4.2.1 传递普通数据

传递普通类型的数据直接使用 Intent 的 putExtra()即可, putExtra 接受两个参数,第一个是一个 String,表示键,第二个是值,类型可以是 byte、 char、 short、 long 等基本类型与这些基本类型组成的数组,当然 String 也可以。
比如在 FirstActivity 中,传递数据给 SecondActivity:
在这里插入图片描述
然后在 SecondActivity 中使用 getIntent()获取 Intent 后,再从里面获取数据:
在这里插入图片描述
如果想从 SecondActivity 中返回数据给 FirstActivity,也就是从被调用的 Activity 中返回数据,可以使用前面介绍过的 setResult()方法。
其中第二个参数是一个用于存储数据的 Intent,把数据 put 进去即可。
在这里插入图片描述
最后记得在 onActivityResult 做相应的判断处理:
在这里插入图片描述
在这里插入图片描述

4.2.2 传递一组数据

当数据的种类变多时,比如混合了 int、 String、 byte、 char 等,可以对逐个类型使用putExtra(),但更好的方法是使用 Bundle。
Bundle 的使用与 Intent 类似,也是对于不同的类型采用键值对的添加方法,直接
putXXX:

在这里插入图片描述
数据添加完毕之后,在 intent 中使用 putExtras(bundle):

在这里插入图片描述
然后就可以在 SecondActivity 中接收数据了。
首先需要使用 getIntent().getExtras()获取 Bundle,再获取里面的数据。
在这里插入图片描述
注意一下获取到的 Bundle 有可能为 null,取数据前需要判断一下。
在这里插入图片描述

4.2.3 传递对象

如果想要传递的数据是一个对象怎么办?难道对每一个属性都使用 get 再放进去吗?
并不是, Bundle 提供了一个处理序列化对象的方法:
在这里插入图片描述
只要对象实现了 Serializable,就可以被 Bundle 处理,比如这里有一个测试类 Student:
在这里插入图片描述
然后在 FirstActivity 中直接 new 一个,并使用 Bundle 的 putSerializable 即可。
在这里插入图片描述接着再 SecondActivity 中通过 Intent 取出 Bundle 后,使用其中的 getSerializable()取
出对象,最后使用强制类型转换
在这里插入图片描述
在这里插入图片描述


五、启动过程

当请求启动Activity时:

  • 1.Launcher进程通过Binder驱动向ActivityManagerService类发起startActivity请求;
  • 2.ActivityManagerService类接收到请求后,向ActivityStack类发送启动Activity的请求;
  • 3.ActivityStack类记录需启动的Activity的信息 & 调整Activity栈 将其置于栈顶、通过 Binder 驱动 将 Activity 的启动信息传递到ApplicationThread线程中(即Binder线程)
  • 4.ApplicationThread线程通过Handler将Activity的启动信息发送到主线程ActivityThread
  • 5.主线程ActivityThread类接收到该信息 & 请求后,通过ClassLoader机制加载相应的Activity类,最终调用Activity的onCreate(),最后启动完毕

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1640270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LinuxC语言】系统日志

文章目录 前言一、系统日志的介绍二、向系统日志写入日志信息三、示例代码总结 前言 在Linux系统中,系统日志对于监控和排查系统问题至关重要。它记录了系统的运行状态、各种事件和错误信息,帮助系统管理员和开发人员追踪问题、进行故障排除以及优化系统…

分割链表----一道题目的3种不同的解法

1.题目概述 以这个题目的事例作为例子,我们看一下这个题目到底是什么意思(Leedcode好多小伙伴说看不懂题目是什么意思),就是比如一个x3,经过我们的程序执行之后;大于3的在这个链表的后面,小于3的…

Linux使用操作(二)

进程的管理_ps 程序运行在计算机操作系统中,由操作系统进行管理。为了管理正在运行的程序,每个程序在运行时都被注册到操作系统中,形成进程 每个进程都有一个独特的进程ID(进程号),用来区别不同的进程。进…

C++初阶-----对运算符重载的进一步理解(2)

目录 1.对于加加,减减运算符的重载理解 2.const修饰的一些事情 3.日期对象之间的减法实现逻辑 1.对于加加,减减运算符的重载理解 (1)在C语言里面,我们已经知道并且了解加加,减减的一些基本的用法&#…

STM32H7 HSE时钟的使用方法介绍

目录 概述 1 STM32H750 HSE时钟介绍 2 使用STM32Cube创建Project 3 认识HSE时钟 3.1 HSE时钟的特性 3.2 HSE的典型应用电路 4 STM32Cube中配置时钟 4.1 时钟需求 4.2 配置参数 4.2.1 使能外围资源 4.2.2 使用STM32Cube注意项 4.2.3 配置参数 5 总结 概述 本文主要…

超强鉴别 cdn 小工具

最近做一个攻防演习,使用了一些工具收集域名,子域名,但是在将这些域名解析成 IP 这个过程遇到了一些小问题,默认工具给出的 cdn 标志根本不准,所以被迫写了这么一个小工具:get_real_ip.py PS:下…

ThreeJS:项目搭建

介绍如何基于Vite、Vue、React构建ThreeJS项目。 Vite项目 1. 初始化项目,命令:npm init vitelatest, 2. 安装依赖,命令:npm install, 3. 启动项目,命令:npm run dev。 4. 样式初始…

神经网络中的优化方法

一、引入 在传统的梯度下降优化算法中,如果碰到平缓区域,梯度值较小,参数优化变慢 ,遇到鞍点(是指在某些方向上梯度为零而在其他方向上梯度非零的点。),梯度为 0,参数无法优化&…

基于Springboot的滑雪场管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的滑雪场管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&a…

【linuxC语言】守护进程

文章目录 前言一、守护进程的介绍二、开启守护进程总结 前言 在Linux系统中,守护进程是在后台运行的进程,通常以服务的形式提供某种功能,如网络服务、系统监控等。守护进程的特点是在启动时脱离终端并且在后台运行,它们通常不与用…

如何使用免费软件从Mac恢复音频文件?

要从Mac中删除任何文件,背后是有原因的。大多数Mac用户都希望增加Mac中的空间,这就是为什么他们更喜欢从驱动器中删除文件以便出现一些空间的原因。一些Mac用户错误地删除了该文件,无法识别这是一个重要文件。例如,他们错误地从Ma…

I/O体系结构和设备驱动程序

I/O体系结构 为了确保计算机能够正常工作,必须提供数据通路,让信息在连接到个人计算机的CPU、RAM和I/O设备之间流动。这些数据通路总称为总线,担当计算机内部主通信通道的作用。 所有计算机都拥有一条系统总线,它连接大部分内部…

ps科研常用操作,制作模式图 扣取想要的内容元素photoshop

复制想要copy的图片, 打开ps---file-----new ,ctrolv粘贴图片进入ps 选择魔棒工具,点击想要去除的白色区域 然后,cotrol shift i,反选, ctrol shiftj复制,复制成功之后,一定要改…

【Java EE】Mybatis之XML详解

文章目录 🎍配置数据库连接和MyBatis🍀写持久层代码🌸添加mapper接口🌸添加UserInfoXMLMapper.xml🌸单元测试 🌲CRUD🌸增(Insert)🌸删(Delete)🌸改(Update)🌸…

CMake:静态库链接其他动态库或静态库(九)

1、项目结构 对于下面这样一个项目 把calc模块做成静态或者动态库把sort模块做成静态库然后再sort模块中的*.cpp调用calc模块生成的库即可(这样就制作了一个静态库引用动态或者静态库)test模块用于测试sort模块中的内容 . ├── calc │ ├── ad…

ThreeJS:本地部署官网文档与案例

部署方式 部署之前请确保已经配置好node.js环境。 1. 下载ThreeJS源码 ThreeJS的GitHub地址:GitHub - mrdoob/three.js: JavaScript 3D Library.,可以简单查看ThreeJS当前版本:r164, 我们可以选择对应的版本(此处为r1…

【跟马少平老师学AI】-【神经网络是怎么实现的】(七-2)word2vec模型

一句话归纳: 1)CBOW模型: 2c个向量是相加,而不是拼接。 2)CBOW模型中的哈夫曼树: 从root开始,向左为1,向右为0。叶子结点对应词有中的一个词。每个词对应唯一的编码。词编码不等长。…

计算机等级考试2级(Python)知识点整理

计算机等级考试2级(Python)知识点整理 1.基础知识点(记忆、理解) 第1讲Python概述 01. 源代码 02. 目标代码 03. 编译和解释 04. 程序的基本编写方法 第2讲 Python语言基础(一) 01. 用缩进表示代码…

深入理解网络原理1

文章目录 前言一、网络初识1.1 IP地址1.2 端口号1.3 协议1.4 五元组1.5 协议分层 二、TCP/IP五层协议三、封装和分用四、客户端vs服务端4.1 交互模式4.2 常见的客户端服务端模型4.3 TCP和UDP差别 前言 随着时代的发展,越来越需要计算机之间互相通信,共享…

前端基础学习html(1)

1.标题标签.h1,h2...h6 2.段落标签p 换行标签br 3.加粗strong(b) /倾斜em(i) /删除 del(s) /下划线ins(u) 4.盒子:div //一行一个 span//一行多个 5.img :src alt title width height border 图片src引用:相对路径 上级/同级/中级 绝对路径&#xff…