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

智能推荐

Java实现非递归归并排序-程序员宅基地

文章浏览阅读240次。public class nonRecursiveMergeSort {public static void main(String[] args) { int[] list = {8,4,3,6,9}; MergeSort(list); for(int num:list) System.out.print(num);}public sta..._java 归并排序非递归

OpenWrt常见问题汇总_openwrt没有路由器的型号-程序员宅基地

文章浏览阅读4.8k次。目录1.***error:'OpenWrtunknown'istoolong,maxfirwareversionlengthis132.DownLoad failed3.OpenWrt的Target Profile找不到自己的路由器型号 4.编译错误you should not run configure as root (set FORCE_..._openwrt没有路由器的型号

source insight 工程项目路径替换_source insight 4.x 替换文件-程序员宅基地

文章浏览阅读1.1k次。然后切换到sourceinsight,刚才的弹窗还在,点击Addfromlist按钮,选择刚才完成路径替换的.txt文件,等待导入完成,至此,完成路径替换,又不用再添加一遍文件。Project->AddandRemoveProjectFiles->RemoveAll,移除原来所有文件,完毕后,当前弹窗别关。Project->ExportProjectFileList,点保存.txt文件。找到刚才保存的.txt文件位置,打开并批量替换路径。..._source insight 4.x 替换文件

java做一个文件存储回滚的实现_java中文件可以回滚吗-程序员宅基地

文章浏览阅读798次。思路:操作任意表之前,先对表做备份,如果出了异常,那么还原备份。采用kv存储 nosql存储main函数:public class TestDemo { public static void main(String[] args) { // 数据初始化 Car car = new Car(); car.setCarAge("0"); car.setCarBirth("2022-01-30"); car.setC_java中文件可以回滚吗

display: weston: opaque region笔记_pixman_region32_intersect-程序员宅基地

文章浏览阅读1.1k次。client的设置方法:region = wl_compositor_create_region(window->display->compositor);wl_region_add(region, 0, 0, window->geometry.width, window->geometry.height);wl_surface_set_opaque_region(window->surface, region);wl_region_de_pixman_region32_intersect

matlab double to int,如何将matlab中的sym数据类型转换为double型-程序员宅基地

文章浏览阅读7.7k次。满意答案a19850429推荐于 2016.11.30采纳率:47%等级:8已帮助:862人一般来说用dec2hex及hex2dec就可以。ss='010600001388849C';ssDec = hex2dec(ss);ssHex = dec2hex(ssDec);format hex;disp(ssHex);不过前提是你的机器能处理这么大的数。我用小一点的数比如说ss='01600..._matlab将sym类型变为double类型

随便推点

【Mac使用技巧】Mac中文输入法打不出来句号_mac打不出来中文句号-程序员宅基地

文章浏览阅读2.2w次,点赞17次,收藏3次。解决办法:点击导航栏里的输入法, 找到use halfwidth punctuation ,如果有勾, 取消选中就行了。此文章本人原创,如有问题底部留言,如有转载请标明出处。--HurryChen Happy Coding! *\( ^ v ^ )/*..._mac打不出来中文句号

腾讯信鸽推送(七):魅族推送通道配置_信鸽 魅族推送-程序员宅基地

文章浏览阅读328次。后台不知道填写的魅族appid是哪个? 腾讯信鸽后台填写的是6位数的appid,如下图所示 需要腾讯信鸽插件请联系企业即时通讯-触点通QQ:1417249367..._信鸽 魅族推送

python-pcl文档_python-pcl 学习教程-程序员宅基地

文章浏览阅读765次。https://python-pcl-fork.readthedocs.io/en/latest/tutorial/_python-pcl 学习教程

Taro/TraoUI框架使用过程中的一些坑-程序员宅基地

文章浏览阅读7.8k次。使用TaroUI组件 @import样式不好使 / 不能够覆盖样式问题Textarea 组件层级穿透问题_traoui

libVLC提取视频帧及自定义读取媒体文件_libvlc_video_set_callbacks-程序员宅基地

文章浏览阅读1.2w次,点赞10次,收藏26次。hello诶喂八滴跟我一起嗨嗨嗨。。。,阿循今天给大家分享一下最近在学习的开源视频播放器vlcplayer的一些心得,我这边是要把这个弄到Unity里去用,因此提取视频帧和自定义读取是很关键的功能点,前者可以拿到数据给unity渲染,后者可以在C#层面去做数据功能模块,开发效率美滋滋。libvlc是vlc的开发者库,它的播放器也是通过libvlc实现的,我们这里用到了C++,不过也是有C#绑定..._libvlc_video_set_callbacks

为 Windows Phone 8.1 app 解决“The type does not support direct content.”的问题-程序员宅基地

文章浏览阅读342次。我在 VS 14 CTP 中新建了一个空的 app store 项目名叫 PlayWithXaml ,项目的 MainPage.xaml 文件改为了以下内容:<Page x:Class="PlayWithXaml.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentat..._the type window not support direct content