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

智能推荐

ECS框架学习(Entitas)入门_ecs框架 entitas-程序员宅基地

文章浏览阅读6.2k次。公司要求使用ECS框架经行开发,没办法只能自己学习了。记录一下学习过程。框架的含义可以去其他地方查看,我这里写一点我的理解(新人,不对请谅解)。ECS即Entity-Component-System(实体-组件-系统) 的缩写。它做到了行为、数据分开,Component存数据。Entity用来就是由各个Component组成。System用来经行他们中间的通信。对于网上或者官方说速度更快、更容..._ecs框架 entitas

vars()函数用法-程序员宅基地

文章浏览阅读1.5w次,点赞10次,收藏35次。python内置函数。vars() 函数返回对象object的属性和属性值的字典对象。vars([对象])当函数不接收参数时,其功能和locals函数一样,返回当前作用域内的局部变量。当函数接收一个参数时,参数可以是模块、类、类实例,或者定义了__dict__属性的对象。#作用于模块>>> import time>&a_vars()

vue中实现文字超出横向滚动_el-pagination超出屏幕-程序员宅基地

文章浏览阅读4.3k次,点赞3次,收藏14次。vue中实现文字超出横向滚动marquee组件<template> <div class="marquee-wrap" ref="marquee-wrap"> <div class="scroll" ref="scroll"> <p class="marquee">{{text}}</p> <p class="copy" ref="copy"></p> </div>_el-pagination超出屏幕

web.config/app.config敏感数据加/解密的二种方法-程序员宅基地

文章浏览阅读59次。一.利用代码加解密usingSystem.Web.Configuration;//加密web.Config中的指定节privatevoidProtectSection(stringsectionName){Configurationconfig=WebConfigurationManager.OpenWebConfigurat..._app.config代码加解密

记录一个诡异的bug-程序员宅基地

文章浏览阅读4k次。我擦,进到XXXXController的261行看了一下,发现是successPage里面的请求http方法报错,竟然进入到了successPage方法,我以为根本没进去呢。完了,完全没有想法了,我以为是天宫的问题,/ai/oa/meetingtran...这个路径找不到,就把整改项目的/oa/请求路径都去掉了,也不好使。我把这个successPage地址,加入到OA测试环境‘智能中心’那个应用,点击‘智能中心’跳转,跳转回successPage,也是不好使。我擦我擦我擦我擦,学习了。

Spring Boot:@EnableAutoConfiguration和@Configuration的区别_@autoconfiguration @configuration-程序员宅基地

文章浏览阅读2.3k次。SpringBoot提倡通过annotation来进行bean的配置,现在spring-boot里面常用的两种创建bean的方式有@EnableAutoConfiguration和@Configuration两种方式。@Configuration方式Spring Application在启动的时候,@ComponentScan注解会扫描包(路径可以指定,默认的情况下就是这个目录所在的包开始扫描),当扫描到@Configuration注解以后,就会初始化这个类下面所有加了@Bean的方法,并初始化这个_@autoconfiguration @configuration

随便推点

如何从零开始实现TDOA技术的 UWB 精确定位系统(1)_uwb_tdoa-程序员宅基地

文章浏览阅读1.1k次,点赞28次,收藏24次。这是一个系列文章,将向你介绍如何从零开始实现一个使用TDOA技术的 UWB 精确定位系统。重要提示劝退说明Q:做这个定位系统需要基础么?A:文章不是写给小白看的,需要有电子技术和软件编程的基础Q:你的这些硬件/软件是开源的吗?A:不是开源的。这一系列文章是授人以“渔”,而不是授人以“鱼”。文章中我会介绍怎么实现UWB定位系统,告诉你如何克服难点,但不会直接把PCB的Gerber文件给你去做板子,不会把软件的源代码给你,不会把编译好的固件给你。我不会给你任何直接的结果,我只是告诉你方法。_uwb_tdoa

各种常见报错汇总_vs未经处理的异常怎么处理-程序员宅基地

文章浏览阅读10w+次,点赞2次,收藏13次。Visual Studio解决办法:报错原因:堆栈溢出,可能是定义的某个变量太大而没有修改栈保留大小所至。本人的问题是用ege画图的时候定义的地图面积太大导致。解决方法:项目→属性→链接器→系统→堆栈保留大小→设置成一个比较大的数并应用。即可完美解决,如果还没解决可能是设置的不够大。其实真正应该修改的是你的代码,问题就出现在为什么会有栈溢出问题,很简单,显然是数组或者开辟的指针空间太大!所以,解决办法就是将大数组定义在main()外部当作全局变量,全局变量放在数据区,空间足够使用。或者写在mai_vs未经处理的异常怎么处理

各大OJ网站的用途及利与弊-程序员宅基地

文章浏览阅读770次,点赞25次,收藏18次。今天就来分享一下我的工作成果,在各个网站搜集了资料,再加上我个人的一些见解,历经半年时间,终于写出这篇博文。希望对大家能有帮助,如果你不知道选用哪个网站进行OJ学习的话,可以认真阅读哦。这些是常见的OJ网站,如果有别的建议,可以留言,我有空的话会回复。

申请代码签名证书-程序员宅基地

文章浏览阅读865次,点赞33次,收藏17次。代码签名证书也是数字证书的一种,其主要作用是对可执行脚本、软件代码和内容进行数字签名的数字证书。代码签名证书用于验证开发者身份真实性、保护代码的完整性。用户下载软件时,能通过数字签名验证软件来源,确认软件、代码没有被非法篡改或植入病毒,保护用户不会被病毒、恶意代码和间谍软件所侵害。使用代码签名证书,您可以保证签名者的身份和软件的完整性,这可以防止在下载和安装软件时出现警告。代码签名证书是软件开发人员用来签署其软件、应用程序和驱动程序代码的数字证书。它使用公私密钥基础设施(PKI)将实体绑定到公钥和私钥。

NOIP提高组历届真题(1997~2018)_noi1998提高组题目-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏7次。上次发了NOIP普及组真题,这次发一波提高组。还是有些难度的先上快捷查看键:第一页第二页第三页上具体题目,难度,以及年份P1003 铺地毯 NOIp提高组 2011 普及-P1005 矩阵取数游戏 NOIp提高组 2007 提高+/省选-P1006 传纸条 NOIp提高组 2008 高性能 普及+/提高P1011 车站 NOIp提高组 1998 普及-P1012 拼数 NOIp..._noi1998提高组题目

美国在线计算机硕士项目,优弗留学美国留学计算机硕士学校分析-程序员宅基地

文章浏览阅读185次。今天优弗留学小编想给大家分享的是关于美国留学读计算机硕士学校的难度分析,有想要去美国留学读计算机硕士的同学有没有对相关的院校有一个大概的了解呢?话不赘述,有需要的同学赶快和优弗留学小编一起来了解一下吧!一、难度五颗星1. Princeton University普林斯顿大学的计算机系申请时只能申请M.S.E. ,M.S.E.是两年的项目,需要完成论文。但研一下学期,可以申请转到Master of ...

推荐文章

热门文章

相关标签