【Android】活动的生命周期与启动模式

【Android】活动的生命周期与启动模式

活动的生命周期

返回栈

返回栈(Back Stack)是Android操作系统中用于管理用户在应用中导航历史的一种数据结构。它允许用户通过按下硬件返回键或调用系统返回功能来回到之前的操作步骤。以下是返回栈的一些关键特点和行为:

基本概念

  • 栈结构:返回栈遵循后进先出(LIFO)的原则,即最后加入栈的 Activity 会最先被移除。
  • 导航:当用户启动一个新的 Activity,当前的 Activity 被推入返回栈。用户可以通过返回操作回到前一个 Activity

生命周期与返回栈的关系

  • 入栈**(Pushing)**:当一个新的 Activity 被启动时,如果 android:launchMode 不是 singleTasksingleInstance,当前 Activity 将被推入返回栈。
  • 出栈**(Popping)**:当用户按下返回键,当前 Activity 将从返回栈中弹出,用户将返回到前一个 Activity
  • 栈顶(Top of Stack):返回栈的顶部是当前在屏幕上显示的 Activity

返回栈的操作

  • 显式意图(Explicit Intent):使用显式意图启动 Activity 时,可以通过设置 Intent 的标志如 FLAG_ACTIVITY_CLEAR_TOP 来影响返回栈的行为。
  • 隐式意图(Implicit Intent):使用隐式意图时,系统可能会启动一个新的 Activity 栈。
  • finish() 方法:调用当前 Activityfinish() 方法会将该 Activity 从返回栈中移除,用户将返回到返回栈的上一个 Activity
  • 清空返回栈:使用 FLAG_ACTIVITY_CLEAR_TOP 标志可以清空当前 Activity 之上的所有 Activity,并将当前 Activity 作为新的栈顶。

返回栈的配置

  • AndroidManifest.xml:在应用的清单文件中,可以通过设置 Activityandroid:launchMode 属性来改变返回栈的行为。例如,singleTopsingleTasksingleInstance 等模式。
  • Intent 标志:通过设置 Intent 的标志,如 FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOP 等,可以控制 Activity 启动时返回栈的表现。

活动状态

运行状态(Resumed)

  • 这是 Activity 的活跃状态,用户可以与之交互。
  • 在这个状态下,Activity 完全可见并处于交互模式。
  • Activity 从其他状态转换到运行状态时,会调用 onResume() 生命周期方法。

暂停状态(Paused)

  • Activity 部分被遮挡,但仍可见时,它进入暂停状态。
  • 例如,当一个新的 Activity 启动并覆盖当前 Activity 的部分视图,或者一个对话框弹出时。
  • 在这个状态下,Activity 仍然可见,但不在交互模式下。
  • 系统会调用 onPause() 方法,这是一个保存状态和停止动画的好地方。

停止状态(Stopped)

  • Activity 完全不可见时,它进入停止状态。
  • 这可能发生在另一个 Activity 完全覆盖它,或者当用户按返回键离开当前 Activity 时。
  • onStop() 方法会被调用,此时应该释放不需要的资源,如传感器、摄像头等。

销毁状态(Destroyed)

  • Activity 被系统销毁时,它进入销毁状态。
  • 这可能是因为内存不足,系统需要杀掉进程,或者 Activity 被明确调用 finish() 方法。
  • 在销毁之前,onDestroy() 方法会被调用,这是一个清理资源的地方,如广播接收器、注册的内容观察者等。

活动的生存期

  1. onCreate(Bundle savedInstanceState)
  • 作用:当Activity第一次创建时调用,是进行初始化设置的地方。
  • 参数Bundle savedInstanceState 包含了先前Activity保存的状态(如果有的话)。当Activity被系统销毁并重新创建时,这个参数会传递之前保存的状态。
  • 任务:在这里设置Activity的布局(通过调用setContentView(int layoutResID)),初始化变量,恢复状态,以及执行一次性的设置。
  1. onStart()
  • 作用:当Activity变得可见时调用,但此时Activity可能还没有获得焦点。
  • 特点Activity已经与用户交互,但可能被其他透明的Activity覆盖。
  • 任务:在这里启动需要的资源,如注册广播接收器,开始动画等。
  1. onRestart()
  • 作用:当Activity从停止状态恢复时调用。
  • 特点:通常发生在用户导航离开Activity后再次返回。
  • 任务:在这里可以重新初始化数据,恢复之前的状态,或者重新获取资源。
  1. onResume()
  • 作用:当Activity进入前台并开始与用户交互时调用。
  • 特点Activity现在是可见的并且是焦点Activity
  • 任务:在这里执行动画的开始,获取用户输入,或者执行定时任务。
  1. onPause()
  • 作用:当Activity部分被遮挡或不再是焦点时调用。
  • 特点Activity可能仍然可见,但用户不能与之交互。
  • 任务:在这里应该停止动画,节省资源,保存任何关键状态,因为Activity可能很快被系统销毁。
  1. onStop()
  • 作用:当Activity不再可见时调用。
  • 特点Activity可能被另一个Activity覆盖,或者用户按了返回键。
  • 任务:在这里释放不需要的资源,如传感器、摄像头等,取消动画,停止播放音频等。
  1. onDestroy()
  • 作用:当Activity被销毁时调用。
  • 特点:这是Activity生命周期中的最后一个回调。
  • 任务:在这里释放所有资源,如广播接收器、注册的内容观察者、定时器等。确保在Activity销毁时没有遗留的系统资源。

img

活动的启动模式

  1. standard
    1. 这是默认的启动模式。
    2. 每次启动 Activity 时,都会创建一个新的实例,并将其放入任务的返回栈中。
    3. 如果用户导航离开并再次返回,系统会重新创建 Activity 的新实例。
  2. singleTop
    1. 当使用 singleTop 启动模式启动 Activity 时,如果它已经位于返回栈的栈顶,系统不会创建新的实例。
    2. 如果 Activity 不在栈顶,或者栈顶的实例不是通过隐式意图启动的,系统将创建一个新的实例。
  3. singleTask
    1. singleTask 模式确保任务中只有一个特定 Activity 的实例存在。
    2. 当启动 Activity 时,如果任务中已经存在该 Activity 的实例,系统不会创建新的实例,而是将这个实例上面的所有 Activity 从返回栈中移除,并将这个实例带到栈顶。
    3. 这确保了 Activity 总是在任务的根位置。
  4. singleInstance
    1. singleInstance 模式确保在整个系统中只有一个 Activity 的实例存在。
    2. 当启动 Activity 时,系统会创建一个新的任务来启动这个 Activity,并且这个 Activity 总是位于任务的根位置。
      tance模式确保在整个系统中只有一个Activity` 的实例存在。
    3. 当启动 Activity 时,系统会创建一个新的任务来启动这个 Activity,并且这个 Activity 总是位于任务的根位置。
    4. 任何试图启动这个 Activity 的尝试都会重用现有的实例,并且不会创建新实例。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R与机器学习系列|15.可解释的机器学习算法(Interpretable Machine Learning)(中)

在上次推文中我们介绍了几种可解释机器学习算法的常见方法,包括置换特征重要性、偏依赖图和个体条件期望及其实现。本次我们将继续介绍其他的用来解释机器学习算法的方法。 1.特征交互(Feature interactions) 1.1介绍 在机器学习中&#xff0…

SpringCache介绍

SpringCache是Spring提供的缓存框架。提供了基于注解的缓存功能。 SpringCache提供了一层抽象,底层可以切换不同的缓存实现(只需要导入不同的Jar包即可),如EHCache,Caffeine,Redis。 2个重要依赖已经导入&a…

肿瘤微生态研究利器——5R 16S rDNA测序

肿瘤微生物组(Tumor Microbiome)是肿瘤微环境中不可或缺的成员,肿瘤内微生物群通过多种机制影响肿瘤发展,在不同类型的肿瘤中,肿瘤内微生物群的组成和丰度具有高度异质性。由于它们的低生物量和其他障碍,全…

Web常见漏洞之po解

暴力破解 概述应用场景实验工具实训准备实训开始四种模式 验证码绕过前端验证码验证码有存活周期 概述 暴力破解是Web漏洞里常见的一种渗透方式,攻击者会试图通过尝试各种可能的用户名和密码组合来猜测密码或密钥,直到猜对为止123。攻击者会经常使用自动…

使用base64通用文件上传

编写一个上传文件的组件 tuku,点击图片上传后使用FileReader异步读取文件的内容&#xff0c;读取完成后获得文件名和base64码&#xff0c;调用后端uploadApi,传入姓名和base64文件信息&#xff0c;后端存入nginx中&#xff0c;用于访问 tuku.ts组件代码&#xff1a; <templa…

win10删除鼠标右键选项

鼠标右键菜单时&#xff0c;发现里面的选项特别多&#xff0c;找一下属性&#xff0c;半天找不到。删除一些不常用的选项&#xff0c;让右键菜单变得干净整洁。 1、按下键盘上的“winR”组合按键&#xff0c;调出“运行”对话框&#xff0c;输入“regedit”命令&#xff0c;点击…

mybatisPlus和mybatis的版本冲突问题、若依换成MP、解决git无法推送、使用若依框架的swagger、以后再遇到团队项目应该怎么做。

20240716 一. mybatisPlus和mybatis的版本冲突问题1. 使用前的准备2. 我遇到了一个很严重的问题。3. 解决问题&#xff0c;好吧也没解决&#xff0c;发现问题&#xff01;&#xff01; 二、该死的git&#xff01;&#xff01;&#xff01;&#xff01;1. 解决无法在idea中使用g…

2.RabbitMQ相关概念

介绍 RabbitMQ是一个消息中间件&#xff0c;接受并转发消息。它接收、存储和转发消息数据。 四大核心概念&#xff1a; 1.生产者 产生数据发送消息的程序是生产者。 2.消费者 3.队列 每一个队列对应一个消费者。 如果两个消费者对应同一个队列&#xff0c;那么队列中的…

R绘制Venn图及其变换

我自己在用R做各种分析时有不少需要反复用到的基础功能&#xff0c;比如一些简单的统计呀&#xff0c;画一些简单的图等等&#xff0c;虽说具体实现的代码也不麻烦&#xff0c;但还是不太想每次用的时候去找之前的代码。 索性将常用的各种函数整成了一个包&#xff1a;pcutils…

深度刨析程序中的指针

前面我们已经学习过了指针的一下性质&#xff1a; 指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识的一块内存空间指针的大小是固定的4/8个字节&#xff08;32位平台/64位平台&#xff09;指针是有类型&#xff0c;指针的类型决定了指针的加减整数的步长&…

Pr 2024下载安装,Adobe Premiere pro2024剪辑软件下载合集获取

Premiere Pro 2023中文版简称Pr&#xff0c;pr2023是一款视频编辑软件。 pr 2023不仅可以帮助用户对各种视频进行剪辑、旋转、分割、合并、字幕添加、背景音乐等基础的处理&#xff0c;还能帮助用户进行视频颜色校正、颜色分级、稳定镜头、调整层、更改片段的持续时间和速度、效…

进程通信(3): System V IPC

System IPC包括System V消息队列&#xff0c;System V信号量&#xff0c;System V共享内存区。 System V IPC使用一个key&#xff08;key_t&#xff09;作为他们名字&#xff0c;这个值由ftok函数通过路径名和一个id生成。 客户和服务器通过在路径名和id达成一致&#xff0c;双…

SpringCloud教程 | 第十篇: 读取Nacos的配置(失败情况2)

参考&#xff1a;SpringCloud搭建Nacos配置中心_springcloud nacos maven-CSDN博客 解决了pom.xml的依赖冲突后&#xff0c;在启动服务时&#xff0c;报错了&#xff0c;并且自动停止了。 2024-07-17 11:13:03.597 ERROR [com.alibaba.nacos.client.remote.worker] com.alibab…

在 Windows 平台搭建 MQTT 服务

一、引言 出于稳定性、可靠性、成本等多方面的考虑&#xff0c;众多 MQTT 服务实现更倾向于选择拥有丰富开源生态系统的 Linux 环境&#xff0c;Windows 平台上可选的 MQTT 服务相对有限。NanoMQ 是用于物联网边缘的超轻量级 MQTT 消息服务器&#xff0c;有着强大的跨平台和可…

超详细信息收集篇

1 域名信息收集 1.1 域名是什么 域名&#xff08;英语&#xff1a;Domain Name&#xff09;&#xff0c;又称网域&#xff0c;是由一串用点分隔的名字组成的 Internet 上某一台 计算机 或计算机组的名称&#xff0c;用于在数据传输时对计算机的定位标识&#xff08;有时也指地…

监控系统怎样做?

监控类型自底向上分为资源监控、服务监控和业务监控。希望打造公司级的监控系统最好的时机是系统规划时&#xff0c;如果把监控设计往后放&#xff0c;将会面临一个巨大的难题&#xff1a;推行和现有不兼容的规范。 三种监控类型 资源监控 这个相对简单&#xff0c;随着k8s的兴…

【深度学习】BeautyGAN: 美妆,化妆,人脸美妆

https://www.sysu-hcp.net/userfiles/files/2021/03/01/3327b564380f20c9.pdf 【深度学习】BeautyGAN: Instance-level Facial Makeup Transfer with Deep Generative Adversarial Network BeautyGAN: Instance-level Facial Makeup Transfer with Deep Generative Adversaria…

嵌入式物联网在教育行业的应用——案例分析

作者主页: 知孤云出岫 嵌入式物联网在教育行业的应用——案例分析 目录 作者主页:嵌入式物联网在教育行业的应用——案例分析一、引言二、智能教室&#xff1a;环境监测系统1. 硬件需求2. 电路连接3. 代码实现 三、个性化学习&#xff1a;智能学习平台1. 数据处理与分析2. 代…

下载仓颉sdk安装时遇到“无法运行”问题

图1. 社区地址&#xff1a;GitCode - 全球开发者的开源社区,开源代码托管平台 在GitCode社区中下载Cangjie-0.53.4-windows_x64的sdk后&#xff0c;双击安装时遇到“此应用无法在你的电脑上运行的问题” 经过反复排查后&#xff0c;确定是sdk直接下载有问题&#xff1b;‘需要…

Android Studio 汉化

下载地址&#xff1a;https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack----/versions/stable 下载完zpi包之后&#xff0c;进入&#xff1a;设置 -> 插件 导入即可。 注&#xff1a; 汉化包需要与 Android Studio 版本对应。