关于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进行资源加载即可。
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的生命周期具体调用时机做了简单的介绍,希望能够帮到大家,文章中如果有错误的或者需要补充的地方欢迎大家留言指正。
文章浏览阅读456次。【README】消息中心的消息追踪需要使用 Trace 实现,Trace是 rabbitmq用于记录每一次发送的消息;方便开发者调试,排错。可通过插件形式提供可视化界面。【1】 开启消息追踪1)消息追踪通过 rabbitmq的插件 trace 来实现, 插件需要启用和打开;2)trace 启动后会自动创建系统 Exchange, amq. rabbitmq.trace, 每个队列会自动该绑定该exchange,绑定后发送到队列的消息都会发送到 trace 日志;3)插件命令序号 _rabbitmq rabbitmq_tracing
文章浏览阅读2k次,点赞3次,收藏25次。1. 导入所需的库import tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltfor i in [tf, np]: print(i.__name__,": ",i.__version__,sep="")输出:tensorflow: 2.2.0numpy: 1.17.42. 导入Fashion_MNIST数据集fashion_mnist = tf.keras.datasets.fas_difussion model mnist
文章浏览阅读693次。点击ppt中的某一张图片,上边工具栏会出现压缩图片的选项。_wps ppt压缩
文章浏览阅读9.4k次。如果需要在网页中添加视频,可以参考下面的代码,支持MP4视频自动循环播放。纯HTML5视频自动循环播放HTML>不过火狐浏览器貌似默认禁止自动播放音频视频,需要到选项 → 隐私与安全 → 自动播放,设置允许音频和视频。如果不设置就可以自动播放,可以使用代码二。配合JS自动循环播放html>HTML5视频自动循环播放window.onload=function(){varloca..._video html播放快结束的时候一直循环最后几秒
文章浏览阅读8.2k次,点赞8次,收藏44次。摘自:STM32F4开发板硬件平台简介作者:SKY丶丿平才发布时间: 2021-03-20 10:44:41网址:https://blog.csdn.net/weixin_48264057/article/details/115023309_stm32f4探索者开发板介绍
文章浏览阅读8.1k次。2016.12.20 乐刻运动 体育运动 B轮 亿元及以上人民币2016.12.14 SenseTime商汤科技 企业服务 B轮 1.2亿美元2016.12.13 OL里昂 体育运动 战略投资 1亿欧元2016.12.13 High Fidelity _idg 被投企业清单
文章浏览阅读1k次,点赞27次,收藏16次。kaldi是一个开源的语音识别工具箱,是基于c++、perl、shell编写的,可以在windows和unix 平台上编译。教程网页:http://www.kaldi-asr.org/doc/ 里面可以查阅语音/说话人识别实现过程、kaldi的数据结构、命令的使用说明等。还有网上的dan的ppt。kaldi下载:https://_利用 kaldi 进行语音识别
文章浏览阅读2k次。互素定义互素也称互质,是指公约数只有1的两个数,如2和3、2和5、3和5等等。matlab函数简单介绍factor(n):对一个数而言是做质数分解,如factor(4),输出为2,2;factor(5),输出为5;factor(9),输出为3,3。factor(f):对一个函数进行因式分解,如f=x2−1f = x^2 - 1f=x2−1输出结果为:[x+1,x−1x + 1, x - 1x+1,x−1]。intersect()函数:求两个集合的交集,如A = [1, 2, 3],B = [3]_matlab 随机生成互质数
文章浏览阅读638次。【项目实战】基于大数据的Hadoop网络电商分析系统Hive数据可视化大屏展示Spark计算机程序设计_大数据处理与分析实训:用hive处理和分析给定的电商数据,并将分析结果进行可视化展
文章浏览阅读58次。一、前言课程名称:软件工程实践作业要求:团队项目需求分析团队名称:葫芦娃战队本次作业目标:完成项目需求说明书软件规格需求说明书:https://files.cnblogs.com/files/beifengtuanzi/%E8%91%AB%E8%8A%A6%E5%A8%83%E9%9C%80%E6%B1%82%E8%AF%B4%E6%98%8E%E4%B9%A6.zip需求报告PPT...
文章浏览阅读1.4k次。Linux man命令数字含义 1 User Commands 2 System Calls 3 C Library Functions 4 Devices and Special Files 5 File Formats andConventions _man 3 printf与man 1 printf有何区别?这里的数字的意义是什么
文章浏览阅读1.2k次,点赞2次,收藏5次。#include "stc15f2k60s2.h"#include "nrf.h"#include "oled.h"#include "usart.h"#include "motor.h"#define L_UPPER_LIMIT 240 ..._遥控车程序c代码