千家信息网

Android生命周期是怎样的

发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,本篇内容介绍了"Android生命周期是怎样的"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、正常
千家信息网最后更新 2025年12月04日Android生命周期是怎样的

本篇内容介绍了"Android生命周期是怎样的"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、正常情况下生命周期


1、生命周期概述

onCreate : 表示页面(Activity)的创建。(生命周期第一个阶段)功能:完成初始化工作,如:加载页面布局资源、初始化数据。

onStart : 表示页面(Activity)正在被启动,即将开始。功能:页面为可见状态,但是无法与用户交互。

onResume : 表示页面(Activity)出现在前台。功能:与 onStart 相比,onStart 处于后台,OnResume 才显示到前台。

onPause : 表示页面(Activity)正在停止。功能:页面处于后台,正常情况下,onStop 紧接着执行。此时会做一些数据存储、停止动画不太耗时的工作。onPause 执行完新的页面(Activity)的 onResume 才会执行。

onStop : 表示页面(Activity)即将停止。功能:页面为不可见状态,做稍微轻量级的不太耗时的回收工作。

onDestroy : 表示页面(Activity)即将销毁。(生命周期最后一个阶段)功能:回收工作和资源的释放。

onRestart : 表示页面(Activity)重新启动。功能:页面从不可见状态转化为可见状态时会调用此方法。如:Home 键切换页面(打开新的 Activity),然后回到页面过程中。


2、搞清两个问题

问题一:onStart 和 onResume、onPause和 onStop 从描述上来看差不多,对我们来说有什么实质上的不同?


答:onStart 和 onStop 是从 Activity 是否可见这个角度来回调的,而 onResume 和 onPause 是从是否位于前台来回调的。


问题二:假设当前 Activity 为 A。如果用户打开一个新的 Activity B,那么 B 的 onResume 和 A 的 onPause 哪个先执行?


答:根据Android的基本运行机制,不能再onPause中执行重量级的操作,因为必须onPause执行完成以后新Activity才能onResume。onPause和onResume都不能执行耗时的操作,尤其是onPause,这就意味着我们应该在onStop中做操作。从而使新的Activity显示出来并切换到前台。



2、异常情况下生命周期

情况一:资源相关的系统配置发生改变导致Activity 被杀死并重新创建



比如当前 Activity 处于竖屏状态,如果突然旋转屏幕,由于系统配置发生改变,在默认情况下,Activity 就会被销毁并且重新创建。


1、过程分析


① Activity 会被销毁,其中onPause、onStop、onDestory均会被调用,同时由于Activity是在异常情况下终止的


② 系统会调用 onSavaInstanceState 来保存当前的 Activity 的状态。这个方法的调用时机是在 onStop 之前,它和 onPause 没有既定的时序关系,它既可能在 onPause 之前或者之后调用。这种情况只会出现在 Activity 被异常终止的条件下。


③ 当 Activity 被重新创建后,系统会调用 onRestoreInstanceState,并且把 Activity 销毁时的 onSaveInstanceState 方法所保存的 Bundle 对象作为参数同时传递给 onRestoreInstanceState 和 onCreate 方法。因此我们可以通过判断 onRestoreInstanceState 和 onCreate 方法是否被重建。


④ 如果被重建了,我们会取出之前保存的数据并恢复,从时序上来说,onRestoreInstanceState 的调用在 onStart 之后。


2、注意:我们销毁 Activity 重新创建获取数据状态时,有两种方式,接收位置可以选择 onRestoreInstanceState(官方建议使用) 或者 onCreate 两者的区别:


① onRestoreInstanceState 一旦被调用,其参数 Bundle saveInstanceState 一定是有值的,我们不用额外的判断是否为空。

② onCreate 正常启动的话,其参数 Bundle saveInstanceState 为 null,所以必须进行额外的判断。

③ 系统只有在 Activity 异常终止的时候才会调用 onSaveInstanceState 和 onRestoreInstanceState 来存储和恢复数据,其他情况不会出发这个过程。


情况二:资源内存不足导致低优先级的Activity被杀死


1、Activity 的优先级


先描述一下 Activity 的优先级情况,Activity 的优先级从高到底,可分为一下三种:


① 前台 Activity -- 正在和用户交互的 Activity ,优先级最高。


② 可见但非前台的 Activity -- 比如 Activity 中弹出了一个对话框,导致 Activity 可见但是位于后台和无法与用户直接交互。


③ 后台 Activity -- 已经被暂停的 Activity ,比如执行了 onStop ,优先级最低。


2、资源内存不足时的过程分析:


当系统资源不足时,系统会按照上述优先级去杀死目标的 Activity 所在的进程,并在后续通过 onSaveInstanceState 和 onRestoreInstanceState 来存储和恢复数据。如果一些后台的进程脱离了四大组件而独立运行,那么这个进程很快就被杀死。我们常常将后台工作放到 Service 中保持进程具有一定的优先级。


3、问题:当系统发生改变时,我们不想让 Activity 发生改变,比如,当我们旋转屏幕时,不想重新创建新的 Activity ,我们会怎么操作?


答:使用 android:configChanges="orientation" 属性。

如果我们没有在 configChanges 属性中指定选项的话,当系统配置发生改变的话 Activity 就会被重新创建。我们常用到的三个属性:


① locale : 设备的本地位置发生了改变,一般指切换了系统语言。


② keyboardHidden : 键盘可访问性发生了改变,比如用户调用了键盘。


③ orientation : 屏幕方向发生了改变,这个是最常用到的,比如旋转的手机屏幕,一般与 screenSize 属性值配合使用。


这样,Activity 不会被创建,onSaveInstanceState 和 onRestoreInstanceState 方法不会被调用,取而代之,系统调用了 onConfigurationChanged 方法,这个时候我们可以做一些特殊的处理了。

"Android生命周期是怎样的"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

页面 情况 系统 优先级 周期 生命 功能 状态 前台 后台 数据 方法 资源 用户 过程 工作 屏幕 属性 进程 问题 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 西安公安部网络安全监察网站 崇明区企业数据库诚信服务 数据库管理 分类 好听的四个字服务器名称 河北品质软件开发过程服务标准 安装mssql数据库文件 暗黑2 离线模式数据服务器 今年首届网络安全宣传周主题 网络安全活动裁剪 邯郸大数据软件开发价格表 网络安全的管家 少年pi的服务器 软件开发就业方向哪些 网络安全云计算厂家的认证证书 自学学计算机软件开发 oa账号密码存放在数据库 互联网科技公司有财务人员吗 网络技术教学进度表 网络安全维护发展趋势图 新疆首届网络安全知识竞赛 hp服务器的安装服务怎么收费 如何写网络安全教育日活动报道 微恒网络技术 快门网络技术有限公司信用代码 union数据库中什么意思 文献梳理数据库 数据库中的货币格式怎么改成英币 小鸟分布式服务器连接图 网络安全专业哪所大学好 数据库分表怎么查历史数据
0