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

【android开发-04】android中activity的生命周期介绍

1,返回栈

android中使用任务task来管理activity,一个任务就是一组存放在栈里的活动的集合,这个栈被称为返回栈。栈是一种先进先出的数据结构。当我们启动一个新的活动,他会在返回栈中人栈,并处以栈顶的位置,而当我们按下back键或者finish去销毁一个活动时,处于栈顶的活动会出栈,这是前一个入栈的活动就会重新处于栈顶的位置。
在这里插入图片描述

2,活动状态
在Android中,Activity的活动状态可以根据其生命周期中的状态进行区分。

活动状态:当Activity处于活动状态时,它位于Activity栈的顶部,是用户当前正在查看的界面,与用户可以进行交互。

暂停状态:当Activity失去焦点时,或者被一个新的非全屏的Activity,或者被一个透明的Activity放置在栈顶时,Activity就转化为暂停状态。此时,系统在杀死或者结束之前会调用onSaveInstance()方法来保存信息,同时,当Activity被移动到前台时,重新启动该Activity并调用onRestoreInstance()方法加载保留的信息,以保持原有的状态。

停止状态:当Activity被另一个Activity完全覆盖的时候,就被停止了。虽然此时它在运行,但用户却看不见。

结束状态:当Activity处于暂停或者停止状态时,系统可以结束Activity,回收资源。处于结束状态的Activity如果要使用户可见,只要重启才可以。

3,活动的生命周期

在Android中,Activity的生命周期是由一系列的方法组成的,这些方法在Activity的不同状态下被系统自动回调。这个生命周期可以被大致划分为三个阶段:活动生命周期、暂停生命周期和停止生命周期。

活动生命周期:
onCreate():当Activity正在被创建时调用。
onStart():Activity已经可见,但还没出现在前台,用户无法与其进行交互。
onResume():Activity已经可见并且出现在前台工作,用户可以与它进行交互。

暂停生命周期:
onPause():表示Activity正在暂停,但Activity依然可见,可以执行一些轻量级操作,但一般不会进行太多操作,因为这样会影响用户体验。

停止生命周期:
onStop():表示Activity即将暂停,此时Activity工作在后台,已经不可见了,可以与onPause方法一样做一些轻量级操作,但依然不能太耗时。
onDestroy():表示活动即将被销毁。

这些方法都按照一定的顺序被调用,且每个方法在其后继方法之前被调用。然而,这些方法是否被回调并不完全依赖于Activity的状态,还取决于是否需要系统资源来运行其他组件或进行其他操作。例如,如果系统内存不足,那么系统可能会销毁一些正在运行的Activity以释放资源。
在这里插入图片描述

4,activity运行的生命周期的例子
以下是一个简单的Android应用程序,演示了Activity生命周期的运行情况:

1,创建一个新的Android项目,并在布局文件activity_main中添加一个按钮。

2,在MainActivity中,覆盖以下生命周期方法:

public class MainActivity extends AppCompatActivity {  private static final String TAG = "MainActivity";  private TextView textView;  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  textView = findViewById(R.id.text_view);  Button button = findViewById(R.id.button);  button.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  startActivity(new Intent(MainActivity.this, SecondActivity.class));  }  });  }  @Override  protected void onStart() {  super.onStart();  Log.d(TAG, "onStart");  }  @Override  protected void onResume() {  super.onResume();  Log.d(TAG, "onResume");  }  @Override  protected void onPause() {  super.onPause();  Log.d(TAG, "onPause");  }  @Override  protected void onStop() {  super.onStop();  Log.d(TAG, "onStop");  }  @Override  protected void onDestroy() {  super.onDestroy();  Log.d(TAG, "onDestroy");  }  
}

3,创建一个名为SecondActivity的新Activity,并在布局文件activity_second中添加一个文本视图。
4,在SecondActivity中,覆盖以下生命周期方法:

public class SecondActivity extends AppCompatActivity {  private static final String TAG = "SecondActivity";  private TextView textView;  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_second);  textView = findViewById(R.id.text_view);  }  @Override  protected void onStart() {  super.onStart();  Log.d(TAG, "onStart");  }  @Override  protected void onResume() {  super.onResume();  Log.d(TAG, "onResume");  }

运行程序的log信息
在这里插入图片描述
点击按钮,启动SecondActivity
在这里插入图片描述
由于第二个activity已经把main activity完全挡住,因此onPause和onStop得到执行。
然后按back键返回main activity
在这里插入图片描述
之前main activity已经进入停止状态,所以onReStart,onStart,onResume依次执行,最后在main activity现在执行back键退出程序
在这里插入图片描述
依次执行onPause,onStop,onDestroy销毁程序。

5,activity中保存和恢复数据
在Android中,Activity可以使用Bundle对象保存和恢复数据。下面是一个示例,展示了如何在Activity之间保存和恢复数据:

首先,创建一个新的Activity类,例如FirstActivity:

public class FirstActivity extends AppCompatActivity {  private static final String KEY_NAME = "name";  private static final String KEY_EMAIL = "email";  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_first);  if (savedInstanceState == null) {  Intent intent = new Intent(this, SecondActivity.class);  intent.putExtra(KEY_NAME, "John Doe");  intent.putExtra(KEY_EMAIL, "johndoe@example.com");  startActivity(intent);  } else {  String name = savedInstanceState.getString(KEY_NAME);  String email = savedInstanceState.getString(KEY_EMAIL);  //恢复数据到界面上  TextView nameTextView = findViewById(R.id.name_text_view);  TextView emailTextView = findViewById(R.id.email_text_view);  nameTextView.setText(name);  emailTextView.setText(email);  }  }  
}

在这个示例中,我们使用Bundle对象保存数据,并使用putExtra()方法将数据传递给下一个Activity。在恢复数据时,我们使用getString()方法从Bundle对象中获取数据,并将其设置到界面上。

接下来,创建一个名为SecondActivity的新Activity类:

public class SecondActivity extends AppCompatActivity {  private static final String KEY_NAME = "name";  private static final String KEY_EMAIL = "email";  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_second);  if (savedInstanceState == null) {  Intent intent = getIntent();  String name = intent.getStringExtra(KEY_NAME);  String email = intent.getStringExtra(KEY_EMAIL);  //将数据保存到Bundle对象中  Bundle bundle = new Bundle();  bundle.putString(KEY_NAME, name);  bundle.putString(KEY_EMAIL, email);  setResult(RESULT_OK, new Intent().putExtras(bundle));  } else {  //从Bundle对象中获取数据并显示在界面上  String name = savedInstanceState.getString(KEY_NAME);  String email = savedInstanceState.getString(KEY_EMAIL);  TextView nameTextView = findViewById(R.id.name_text_view);  TextView emailTextView = findViewById(R.id.email_text_view);  nameTextView.setText(name);  emailTextView.setText(email);  }  }  
}

在这个示例中,我们使用getIntent()方法获取传递的数据,并将其保存到Bundle对象中。然后,我们使用setResult()方法将Bundle对象传递回上一个Activity。在恢复数据时,我们使用getStringExtra()方法从Bundle对象中获取数据,并将其设置到界面上。

相关文章:

【android开发-04】android中activity的生命周期介绍

1,返回栈 android中使用任务task来管理activity,一个任务就是一组存放在栈里的活动的集合,这个栈被称为返回栈。栈是一种先进先出的数据结构。当我们启动一个新的活动,他会在返回栈中人栈,并处以栈顶的位置&#xff0…...

java后端技术演变杂谈(未完结)

1.0版本javaWeb:原始servletjspjsbc 早期的jsp:htmljava,页面先在后端被解析,里面的java代码动态渲染完成后,成为纯html,再通过服务器发送给浏览器显示。 缺点: 服务器压力很大,因为…...

UDS 诊断报文格式

文章目录 网络层目的N_PDU 格式诊断报文的分类:单帧、多帧 网络层目的 N_PDU(network protocol data unit),即网络层协议数据单元 网络层最重要的目的就是把数据转换成符合标准的单一数据帧(符合can总线规范的),从而…...

kafka的详细安装部署

introduce Kafka是一个分布式流处理平台,主要用于处理高吞吐量的实时数据流。Kafka最初由LinkedIn公司开发,现在由Apache Software Foundation维护和开发。 Kafka的核心是一个分布式发布-订阅消息系统,它可以处理大量的消息流,并…...

【数据分享】2015-2023年我国区县逐月二手房房价数据(Excel/Shp格式)

房价是一个城市发展程度的重要体现,一个城市的房价越高通常代表这个城市越发达,对于人口的吸引力越大!因此,房价数据是我们在各项城市研究中都非常常用的数据!之前我们分享过2015-2023年我国地级市逐月房价数据&#x…...

PTA 7-226 sdut-C语言实验-矩阵输出(数组移位)

输入N个整数&#xff0c;输出由这些整数组成的n行矩阵。 输入格式: 第一行输入一个正整数N&#xff08;N<20&#xff09;&#xff0c;表示后面要输入的整数个数。 下面依次输入N个整数。 输出格式: 以输入的整数为基础&#xff0c;输出有规律的N行数据。 输入样例: 在…...

Android 各平台推送通知栏点击处理方案

示例代码如下&#xff1a; RongPushClient.setPushEventListener( new PushEventListener() { Override public boolean preNotificationMessageArrived( Context context, PushType pushType, PushNotificationMessage notificationMessage) { //透传通知时&#xff0c;调用。…...

什么是网络安全 ?

网络安全已成为我们生活的数字时代最重要的话题之一。随着连接设备数量的增加、互联网的普及和在线数据的指数级增长&#xff0c;网络攻击的风险呈指数级增长。 但网络安全是什么意思&#xff1f; 简而言之&#xff0c;网络安全是一组旨在保护网络、设备和数据免受网络攻击、…...

【前端】-【electron】

文章目录 介绍electron工作流程环境搭建 electron生命周期&#xff08;app的生命周期&#xff09;窗口尺寸窗口标题自定义窗口的实现阻止窗口关闭父子及模态窗口自定义菜单 介绍 electron技术架构&#xff1a;chromium、node.js、native.apis electron工作流程 桌面应用就是…...

Python中的类(Class)和对象(Object)

目录 一、引言 二、类&#xff08;Class&#xff09; 1、类的定义 2、类的实例化 三、对象&#xff08;Object&#xff09; 1、对象的属性 2、对象的方法 四、类和对象的继承和多态性 1、继承 2、多态性 五、类与对象的封装性 1、封装的概念 2、Python中的封装实现…...

dp-拦截导弹2

所有代码均来自于acwing中的算法基础课和算法提高课 Description 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷&#xff1a;虽然它的第一发炮弹能够到达任意的高度&#xff0c; 但是以后每一发炮弹都不能高于前一发的高度。…...

初识动态规划算法(题目加解析)

文章目录 什么是动态规划正文力扣题第 N 个泰波那契数三步问题使用最小花费爬楼梯 总结 什么是动态规划 线性动态规划&#xff1a;是可以用一个dp表来存储内容&#xff0c;并且找到规律存储,按照规律存储。让第i个位置的值等于题目要求的答案 >dp表&#xff1a;dp表就是用一…...

Vue2.0与Vue3.0的区别

一、Vue2和Vue3的数据双向绑定原理发生了改变 Vue2的双向数据绑定是利用ES5的一个API&#xff0c;Object.definePropert()对数据进行劫持 结合 发布 订阅模式的方式来实现的。通过Object.defineProperty来劫持数据的setter&#xff0c;getter&#xff0c;在数据变动时发布消息…...

探索人工智能领域——每日20个名词详解【day6】

目录 前言 正文 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f4e3;如需转载&#xff0c;请事先与我联系以…...

C++初阶 | [七] string类(上)

摘要&#xff1a;标准库中的string类的常用函数 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c; 但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP(面向对象)的思想&#…...

Django总结

文章目录 一、Web应用Web应用程序的优点Web应用程序的缺点应用程序有两种模式C/S、B/S C/S 客户端/服务端局域网连接其他电脑的MySQL数据库1.先用其他电脑再cmd命令行ping本机ip2.开放MySQL的访问 B/S 浏览器/服务端基于socket编写一个Web应用 二、Http协议1.http协议是什么2.h…...

【qml入门系列教程】:qml QtObject用法介绍

作者:令狐掌门 技术交流QQ群:675120140 博客地址:https://mingshiqiang.blog.csdn.net/ 文章目录 QtObject 是 Qt/QML 中的一个基础类型,通常用作创建一个没有 UI 的(不渲染任何东西的)纯逻辑对象。可以使用它来组织代码、存储状态或者作为属性和方法的容器。 以下是如何…...

2分图匹配算法

定义 节点u直接无边&#xff0c;v之间无边&#xff0c;边只存在uv之间。判断方法&#xff1a;BFS染色法&#xff0c;全部染色后&#xff0c;相邻边不同色 无权二部图中的最大匹配 最大匹配即每一个都匹配上min&#xff08;u&#xff0c; v&#xff09;。贪心算法可能导致&…...

[EndNote学习笔记] 导出库中文献的作者、标题、年份到Excel

菜单栏Edit中&#xff0c;选择 Output Styles 在默认的 Annotated上进行修改&#xff0c;在Bibliography栏下的Templates中修改想要导出的格式 其中&#xff0c;每个粗体标题表示&#xff0c;针对不同的文献类型&#xff0c;设置相应的导出格式。一般为Journal Article&…...

SQL Sever 基础知识 - 数据查询

SQL Sever 基础知识 - 一、查询数据 一、查询数据第1节 基本 SQL Server 语句SELECT第2节 SELECT语句示例2.1 SELECT - 检索表示例的某些列2.2 SELECT - 检索表的所有列2.3 SELECT - 对结果集进行筛选2.4 SELECT - 对结果集进行排序2.5 SELECT - 对结果集进行分组2.5 SELECT - …...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...