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

详细阐述Activity的生命周期

目录

1. onCreate():

2. onStart():

3. onResume():

4. onPause():

5. onStop():

6. onRestart():

7. onDestroy():

活动生命周期图:

特别说明:

例子:


Android 中的 Activity 生命周期定义了 Activity 从创建到销毁所经历的状态。了解这些状态对于管理应用中的资源分配、用户交互和后台进程至关重要。

1. onCreate()

  • 这是创建活动时调用的第一个回调。
  • 目的:初始化活动。使用 设置 UI setContentView()、初始化变量,以及如果活动之前被销毁(通过savedInstanceState包)则恢复状态。
  • 调用一次:当活动首次创建或终止后重新创建时。

2. onStart()

  • onCreate()当活动对用户可见时,调用。
  • 目的:这是您准备与用户交互的活动的地方。例如,启动动画或开始显示数据更新。
  • 该活动尚未处于前台,但可见。

3. onResume()

  • 当活动即将进入前台并开始与用户交互时调用。
  • 目的:这是活动开始运行的地方。活动处于焦点状态,用户可以与其交互。恢复任何暂停的 UI 更新、线程或后台任务。
  • 每次活动暂停后恢复时调用,例如从另一个活动返回。

4. onPause()

  • 当 Activity 被另一个 Activity 部分遮挡(但未完全隐藏)时,将调用此方法。Activity 仍然可见,但不再处于焦点中。
  • 目的:在活动未获得焦点时释放不需要的任何资源(如相机或传感器)。停止 UI 更新或动画。
  • 数据保存至关重要:您应该在这里保存数据或状态,因为下一个状态可能是onStop()甚至被终止的活动。

5. onStop()

  • 当活动对用户不再可见时调用。
  • 目的:在这里释放不需要的资源,直到活动再次可见(例如保存复杂状态、停止长时间运行的进程或关闭网络连接)。
  • 如果应用程序回到前台,onRestart()将会被调用,然后是onStart()

6. onRestart()

  • 仅当活动停止后返回前台时才调用。
  • 目的:这通常是一种简短的方法,您可以用它重新初始化资源或刷新数据。
  • 当活动回到前台时之后onStop()和之前调用。onStart()

7. onDestroy()

  • 当活动被系统(以回收资源)或用户(完成活动)销毁时调用。
  • 目的:这是你对资源进行最终清理的地方。这是 Activity 完全从内存中删除之前的最终状态。
  • onPause()如果在或期间未保存任何关键数据,您还应确保在此处保存这些数据onStop()

活动生命周期图:

onCreate()↓
onStart()↓
onResume() - (Activity is running)↓
onPause() - (Another activity comes into focus)↓
onStop() - (Activity is no longer visible)↓
onRestart() (If the activity comes back to foreground)↓
onDestroy() (When activity is completely finished)

特别说明:

  • 状态保存:在onPause()或期间onStop(),使用savedInstanceStatebundle 来存储必要的状态数据。这允许 Activity 在被销毁并重新创建时恢复自身。
  • 背景和前台onResume()用于onPause()管理前台和背景之间的转换。暂停活动与停止活动不同,因为暂停发生在活动仍然部分可见时。

例子:

  • 当电话呼叫中断应用程序时,活动将进入此onPause()状态。如果用户返回,onResume()则被调用。如果活动被完全覆盖(例如,用户转到主屏幕),onStop()则被调用。

此生命周期对于有效管理内存和资源、提供流畅的用户体验至关重要。

http://www.lryc.cn/news/437181.html

相关文章:

  • spring boot+vue3学习之旅
  • vue-watch监听功能(侦听器)详解使用
  • 8.第二阶段x86游戏实战2-实现瞬移
  • uts+uniapp踩坑记录(vue3项目
  • 《深度学习》OpenCV 高阶 图像金字塔 用法解析及案例实现
  • dirty pages , swapiness 查看SWAP占用进程
  • Spring Boot项目更改项目名称
  • Hive SQL基础语法及查询实践
  • k8s service如何实现流量转发
  • 每日一练:K个一组翻转链表
  • 昨晚,OpenAI震撼发布o1大模型!我们正式迈入了下一个时代。
  • MySql8.x---开窗函数
  • 图文讲解HarmonyOS应用发布流程
  • 【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)
  • 经典负载调制平衡放大器(LMBA)设计-从理论到ADS仿真
  • Web开发:基础Web开发的支持
  • 【LeetCode每日一题】——LCR 168.丑数
  • Day7 | Java框架 | SpringMVC
  • 【网络通信基础与实践第二讲】包括互联网概述、互联网发展的三个阶段、互联网的组成、计算机网络的体系结构
  • CentOS7下安装Ruby3.2.4的实施路径
  • Redis 实现原理或机制
  • 使用程序方式获取与处理MySQL表数据
  • 计算机网络(五) —— 自定义协议简单网络程序
  • 开源模型应用落地-qwen2-7b-instruct-LoRA微调-unsloth(让微调起飞)-单机单卡-V100(十七)
  • [数据集][目标检测]车油口挡板开关闭合检测数据集VOC+YOLO格式138张2类别
  • Delphi 的 RSA 库 LockBox
  • element UI学习使用(1)
  • 如何搞定日语翻译?试试这四款工具
  • 【STM32】独立看门狗(IWDG)原理详解及编程实践(上)
  • 前端框架大观:探索现代Web开发的基石