想了解 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

智能推荐

算法之旅 动态规划之车间调度问题_动态规划求解车间调度-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏35次。动态规划之车间调度问题真言哎呀,大家好。憋了我久了,终于回校了,回校以后真不想说我的大学了,你说我回来这么早来准备面试,你给供暖不行呀,暖气冰凉冰凉的,你想冻死学生呀,学生回来早点好找工作,找个世界500强也不是给你争脸麽。如果不是好好学习的同学,他会回校这么早么?你咋不知道好歹呢?还不如上班呢,呜呜呜。回到正题,代码一年前写的,自己感觉真烂,各种不满意,注释,异常,优_动态规划求解车间调度

Jenkins构建历史中的Build Name设置_jenkins 构建名 #1-程序员宅基地

文章浏览阅读7.8k次,点赞2次,收藏8次。之前已经写了关于java项目和前端react项目自动化构建的文章,有没有发现,在项目的构建历史中,只能看到项目的构建号和构建时间。终于,开发人员在使用的过程中提出了新需求:在项目的构建历史中能直接看到某次构建是谁发布的,发布的是什么分支,而不用去某次构建的"控制台输出"中查看。其实这个需求实现起来并不难,毕竟Jenkins的插件社区这么强大。下面的两个插件,就很好的解决了这个需求。user..._jenkins 构建名 #1

conda pip更新包的命令_pip update conda-程序员宅基地

文章浏览阅读1.3k次。1.condaconda update name2.pippip install --upgrade name_pip update conda

ESP32cam系列教程001:使用webcam摄像头实时查看视频_库管理中找不到camera_pins.h-程序员宅基地

文章浏览阅读5.4k次,点赞3次,收藏42次。esp32cam 使用 webcam 摄像头实时查看视频_库管理中找不到camera_pins.h

python资源收录_python获取网站收录-程序员宅基地

文章浏览阅读145次。【腾讯云 云社区】python学习之旅_python获取网站收录

docker 安装gogs并删除注册按钮_gogs 管理员关闭注册-程序员宅基地

文章浏览阅读1k次。(1)下载镜像 docker pull gogs/gogs (2)创建容器 docker run ‐di ‐‐name=gogs ‐p 10022:22 ‐p 3000:3000 ‐v /var/gogsdata:/data gogs/gogs下载镜像 docker pull gogs/gogs创建容器创建对应的文件 mkdir -p /var/jenkins_home创建容器 docker run ‐di ‐‐name=gogs ‐p 10022:_gogs 管理员关闭注册

随便推点

相机标定 - (03) - matlab单目相机标定_calib_gui文件-程序员宅基地

文章浏览阅读924次。matlab工具箱toolbox_calib单目相机标定_calib_gui文件

片上总线Wishbone 学习—— 转载请注明出处:http://blog.csdn.net/ce123_wishbone架构-程序员宅基地

文章浏览阅读3.9k次,点赞6次,收藏11次。片上总线Wishbone 学习(零)前言 为了更加升入的理解片上系统,比如S3C2440等,今天开始学习片上总线。首先学习Silicon的Wishbone,之后学习ARM的AMBA。之所以先学习Wishbone,主要是因为Wishbone是一个轻量级规范,适合入门学习。_wishbone架构

Unity-- Gfx.WaitForPresentOnGfxThread占用CPU过高导致帧率低-程序员宅基地

文章浏览阅读7k次,点赞4次,收藏6次。一个新建的URP项目,里面只有几个测试模型,结果在3070的笔记本电脑上,只能运行到20帧!Gfx.WaitForPresentOnGfxThread 这个东西,是CPU已经准备好绘制下一帧,但是GPU还没准备好,应用程序等待 GPU 所花费的时间。那就说明,卡在GPU的性能上了。(6) 笔记本电脑的系统设置。有些笔记本电脑,是有系统设置的,可以直接影响GPU的渲染能力。切换为【性能】设置,释放GPU能力。关闭了所有URP耗性能相关的设置,情况未有好转。死磕了一下午,终于找到原因,解决了。_gfx.waitforpresentongfxthread

合肥工业大学数据库实验报告-程序员宅基地

文章浏览阅读649次。在完成这次实验之前,我对数据库管理和SQL语言都只有一些基础的概念和知识。通过这次实验,我深入了解了数据库的概念和原理,学习了SQL语言的基本操作和语法规则,并通过实践掌握了SQL语句的定义、查询和更新等功能。同时,我还学习了如何使用Navicat等可视化数据库管理工具,更加方便地进行数据库的创建、维护和管理。在实验过程中,我遇到了一些问题,如SQL语句的语法错误、表格的定义不完整等等,但通过查阅相关资料和调试,我逐渐解决了这些问题,并加深了对数据库和SQL语言的理解。

原生JS实现购物车结算_"div class=\"fr closing\">结 算</div> <div class=\"f-程序员宅基地

文章浏览阅读5.8k次,点赞5次,收藏9次。http-equiv="Content-Type" content="text/html; charset=utf-8"/> 原生JS实现购物车结算功能代码 *{margin:0;padding:0;list-style-type:none;}a{color:#666;text-decoration:none;}table{border-coll_"div class=\"fr closing\">结 算 合计:¥

android dhcp 服务器,Android推送SDK(10)-DHCP租约到期自动续租问题导致TCP连接异常-程序员宅基地

文章浏览阅读699次。DHCP简单的来说,DHCP是一个局域网协议,使用UDP协议进行工作,它的作用就是动态的分配IP地址,Gateway地址,DNS服务器地址等信息,一旦租约到期,那么路由器就会把当前的这个ip分配给其他设备使用,所以,对于设备而言要定期请求DHCP Server来更新ip地址信息,保证ip地址有效可用DHCP租约到期,设备不会自动进行续租而仍然使用旧的ip地址DHCP租约到期,设备向DHCP Ser..._安卓设备ip租期