想了解 Activity生命周期执行时机的看过来_onstart调用-程序员宅基地

技术标签: 生命周期  android  Activity  

          关于Android的生命周期这点事,相信大家一定耳熟能详,然而对每个生命周期的精确调用时机,大家是否能够精确掌握呢,我们都知道,Activity的生命周期,在Android开发中,占有重要地位,在UI渲染、业务逻辑、资源释放等等很多地方都需要关联到生命周期了,如果用的不好,就会造成各种问题,这篇文章的目的就是带大家详细了解下生命周期的各种调用时机及场景,首先看下如下的生命周期图:

       接下来我们先以每个生命周期的方法来讲述他们的调用时机:          

         onCreate(Bundle savedInstanceState)

         onCreate的调用时机在于Activity的初始化,在整个Activity的生命周期中只会调用一次,所以,在这里你可以初始化一些只需要初始化一次的代码,其中Bundle中保存了上一次Activity异常终止的数据,这个异常终止可能是被系统回收,也可能是屏幕旋转重建Activity,在这里就可以获取到Activity终止前的一些状态,从而保持友好的用户体验。

         onRestart()

         onRestart的调用时机在Activity从停止到恢复,常见场景如从ActivityB按返回键退到ActivityA,这时就会调用ActivityA的onRestart方法,它与onStart方法不同,onStart方法是在Activity的创建过程中就一定会调用,而onRestart只有在停止到恢复才会调用,调用顺序为onRestart->onStart

         onStart()

         onStart方法在Activity初始化的时候会调用一次,Activity从停止到恢复也会调用一次,Activity的停止到恢复完整的调用顺序为onRestart->onStart->onResume

         onResume()

         onResume方法在三种情况下会被调用,即Acitivty的创建、Activity从暂停/停止到恢复都会嗲用,三种情况下的完整调用顺序为:onCreate->创建->onResume;暂停->onPause->恢复->onResume停止->OnPause->onStop->恢复->onReStart->onStart->OnResume

         onPause()

         onPause方法只有在Activity被暂停(Activity失去焦点、被非全屏Activity覆盖时、被透明Activity覆盖)、停止(Activity完全不可见)、结束Activity三种时机会被调用。

         onStop()

onStop只有在应用停止,或者结束Activity时会被调用,执行顺序为:停止/结束->onPause->onStop

         onDestroy()

onDestroy方法的执行,代表整个Activity的生命走向了总结,在这里需要释放Activity所引用的所有资源,当然,建议合理的利用生命周期,在onPause和onStop中就对一些资源做释放。例如一些动画的执行,可以在onPause时就暂停动画的执行,并释放资源,如果重新恢复时再在onResume进行资源加载即可。

       除了上述的单个Activity的生命周期,我们也可能用到多个Activity的生命周期交互,这里介绍两个Activity的生命周期交互

         ActivityA跳转到ActivityB

         上述对于单个Activity的生命周期执行时间节点做了讲述,大部分情况下,都能够满足开发需求了,但如果是两个Acitivity的交互,关于两个Acitivty的交互生命周期执行又是什么样的呢?下述带大家一起了解下:

这里我们从ActivityA跳转到ActivityB中,生命周期的执行顺序如下:

A.onPause->B.onCreate->B.onStart->B.onResume->A.onStop 在这里可以看到,AB的生命周期是交互在一起的,并不是A执行了onStop后B才开始创建,如果有A、B的交互业务需求,就要注意A的生命周期和B的生命周期的执行顺序了;

再看从A退回到B的生命周期的执行顺序:

B.onPause->A.onRestart->A.onStart->A.onResume->B.onStop->B.onDestroy 同样,在某些需求下,会有A、B的交互业务,这时如果对这种交互生命周期不是很了解的,就可能会造成一些逻辑上的错误了。

         关于Dialog对生命周期的影响

         不管是实际应用,还是不少面试题都会考到这一点,很多人都疑惑,Dialog到底对生命周期有没有影响呢,答案是没有影响,因为Dialog是附着在Activity的窗体上的,实际上就是Activity的一个视图,当然不会影响到Activity的生命周期了。

         本章对Activity的生命周期具体调用时机做了简单的介绍,希望能够帮到大家,文章中如果有错误的或者需要补充的地方欢迎大家留言指正。

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/vv765947965/article/details/95214732

智能推荐

vue3项目中引入dialog插件,支持最大最小化、还原、拖拽_element plus dialog 最小化停靠-程序员宅基地

文章浏览阅读1.7k次。上图是layui-vue组件库中的layer插件,我的项目使用的是element-plus组件库,在用不上layui组件库的情况下,就单独引入。2.在需要展示弹层的位置引入弹层组件或函数(layer弹层支持以函数/标签的形式使用)1.按照npm地址的Readme操作,在mainjs中引入插件并全局注册。具体的API见上方layui-vue组件库地址。这个弹层插件就可以了。_element plus dialog 最小化停靠

轻松使用热部署,解决idea每次修改代码后都需要重启的苦恼_idea构件项目时总是重启-程序员宅基地

文章浏览阅读8.9k次,点赞4次,收藏22次。注:这里使用热部署,仅需轻松几步即可做到每次修改都能实时反映到页面上。同时要注意的是:这里使用idea环境下创建项目,使用maven构建整个项目。(对于不熟悉maven的同学还请先学习相关知识)1.pom.xml里面导入相关依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <_idea构件项目时总是重启

【ParaView教程】2.11 时间_paraview 时间曲线-程序员宅基地

文章浏览阅读1.4k次。现在我们已经完整分析了disk_out_ref的模拟结果,接下来我们将转到一个新的模拟,看看ParaView如何处理时间。在本节中,我们将使用另一个简单模拟中的新数据集,此数据集是随时间变化的数据。练习2.19:加载时间数据下面将开始一个新的可视化,点击 重置ParaView。1.打开文件can.ex2。2.如前所述,单击变量列表标题中的复选框以加载所有变量,并单击 按钮。3.按下 按钮将相机对向网格。4.在工具栏点击播放按钮 观看网格动画。 ._paraview 时间曲线

计算机安装中cpu的安装教程,一不小心就报废!CPU正确安装与存放指南-程序员宅基地

文章浏览阅读7.8k次。前言:九月份又快到了,大学入学生装机热潮即将到来,照近年趋势来看,不少人会从去电脑城装机变成网购DIY硬件然后自己在宿舍装机,然而很多小白可能还不大懂怎么装机,可能一个不小心就报废重要硬件,因此近期我们会给小白们科普一些基本的装机知识,让小白们装机起来更加得心应手。一不小心就报废!CPU正确安装与存放指南●Intel篇:认识IntelCPU和护盖Core i处理器可以分三种接口Intel近年主流的..._cpu如何安装

安装苹果ipa的方法-程序员宅基地

文章浏览阅读437次。udid获取工具 https://www.betaqr.com/tools。mac下载爱思助手,数据线连接手机,把ipa包拖到爱思助手app应用选项里。

css设置文字自动垂直居中显示,css文字水平垂直居中怎么设置?-程序员宅基地

文章浏览阅读1.4k次。1、文字水平居中在CSS中想要让文字水平居中,可以使用text-align:center;。text-align是一个基本的属性,它会影响一个元素中的文本行互相间的对齐方式。值left、right和center会导致元素中的文本分别左对齐、右对齐和居中,想要使文本居中,直接使用center即可。该属性设置文本和img标签等一些内联对象(或与之类似的元素)的居中。示例:css 水平居中.box {w..._text-align字体垂直显示

随便推点

kylin优化浅见_kylin v10内存回收慢-程序员宅基地

文章浏览阅读93次。欢迎指导,愿意答疑!_kylin v10内存回收慢

DingTalk「开发者说」如何开发钉钉高价值应用三部曲_钉钉是用什么开发的-程序员宅基地

文章浏览阅读1.2k次。DingTalk「开发者说」是钉钉开发者最新上线的开发者栏目,联合阿里云ACE团队,分享钉应用开发解决方案、技术更新、实战技巧,致力于成为钉钉与开发者的桥梁与纽带,让更多的钉钉开发者传播技术、提升技能、分享观点。在数字化变革的时代,“云钉一体”“钉钉全面开放”战略之后,希望钉钉技术可以持续激发开发者的创造力,为组织数字化赋能。分享人:任准,缤果科技CTO_钉钉是用什么开发的

Visual Studio UE项目无法启动调试_ue vs无法启动调试,请通过打开项目属性并-程序员宅基地

文章浏览阅读186次。点完这个又遇到问题:game files required to initialize the global shader library are missing from…错误信息:无法启动调试,请通过打开项目属性并导航到“配置属性”->“调试”来检查调试器设置。在ue官方社区找到了答案:编译器选成DebugGame Editor。如图所示,也不知道为啥会这样,还导致代码无法正常编译。_ue vs无法启动调试,请通过打开项目属性并

MBA核心课程-程序员宅基地

文章浏览阅读479次。一、经营战略  这一门课可以说是MBA教学的一个整体基础,是需要花一整年即两个学期来学的课程。几乎所有的工商管理学院都开设了此类课程。这门课要求MBA学生设身处境地去学习和掌握如何去构筑企业战略的总体框架,如何逐一按照框架去制定并完成与企业目标有关的各项具体方针。学生必须站在总经理的立场,对企业的组织、市场、财务、人事、信息系统,以及政府有关部门的关系等各方面问题做通盘的..._managing employee attitude & behaviour课程mba会学吗

在C++类中使用dllimport和dllexport导出,-程序员宅基地

文章浏览阅读681次。在Windows平台下:您可以使用dllimport或dllexport属性声明C ++类。这些形式意味着导入或导出整个类。以这种方式导出的类称为可导出类。以下示例定义可导出的类。导出其所有成员函数和静态数据:#define DllExport __declspec( dllexport )class DllExport C { int i; ..._struct dllexport c++ 导出结构体