生命周期中各个方法的含义和作用
常见生命周期
onCreate:
create表示创建,这是
Activity生命周期的第一个方法,也是我们在
android开发中接触的最多的生命周期方法。它本身的作用是进行
Activity的一些初始化工作,比如使用
setContentView加载布局,对一些控件和变量进行初始化等。但也有很多人将很多与初始化无关的代码放在这,其实这是不规范的。 此时
Activity`还在后台,不可见。所以动画不应该在这里初始化,因为看不到……onStart
:start
表示启动,这是Activity
生命周期的第二个方法。 此时Activity
已经可见了,但是还没出现在前台,我们还看不到,无法与Activity
交互。其实将Activity
的初始化工作放在这也没有什么问题,放在onCreate
中是由于官方推荐的以及我们开发的习惯。onResume
:resume
表示继续、重新开始,这名字和它的职责也相同。此时Activity
经过前两个阶段的初始化已经蓄势待发。Activity
在这个阶段已经出现在前台并且可见了。这个阶段可以打开独占设备onPause
:pause
表示暂停,当Activity
要跳到另一个Activity
或应用正常退出时都会执行这个方法。紧接着onStop方法
就会被调用,我们可以进行一些轻量级的存储数据和去初始化的工作,不能太耗时,因为在跳转Activity
时只有当一个Activity
执行完了onPause
方法后另一个Activity
才会启动,android
中指定如果onPause
在500ms即0.5秒内没有执行完毕的话就会强制关闭Activity
。 **从生命周期图中发现可以在这快速重启,但这种情况其实很罕见,比如用户切到下一个Activity
的途中按back
键快速得切回来。onStop
:stop
表示停止,此时Activity
已经不可见了,但是Activity
对象还在内存中,没有被销毁。这个阶段的主要工作也是做一些资源的回收工作。onDestroy
:destroy
表示毁灭,这个阶段Activity
被销毁,不可见,我们可以将还没释放的资源释放,以及进行一些回收工作。onRestart
:restart
表示重新开始,Activity
在这时可见,当用户按Home
键切换到桌面后又切回来或者从后一个Activity
切回前一个Activity
就会触发这个方法。这里一般不做什么操作。
不常见生命周期
Android 完整生命周期: onCreate –> onContentChanged –> onStart –> onPostCreate –> onResume –> onPostResume –> onPause –> onStop –> onDestroy
onContentChanged
onContentChanged()
是Activity
中的一个回调方法 当Activity
的布局改动时,即setContentView()
或者addContentView()
方法执行完毕时就会调用该方法, 例如,Activity
中各种View
的findViewById()
方法都可以放到该方法中。
onPostCreate
与onPostResume
onPostCreate
方法是指onCreate
方法彻底执行完毕的回调,系统做最后的初始化操作,onPostResume
类似,这两个方法官方说法是一般不会重写。 现在知道的做法也就只有在使用ActionBarDrawerToggle
的使用在onPostCreate
需要在屏幕旋转时候等同步下状态,Google官方提供的一些实例就是如下做法:
@Overrideprotected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();}
生命周期区别
onCreate和onStart之间区别
- 可见与不可见的区别。前者不可见,后者可见。
- 执行次数的区别。
onCreate
方法只在Activity
创建时执行一次,而onStart
方法在Activity
的切换以及按Home
键返回桌面再切回应用的过程中被多次调用。因此Bundle
数据的恢复在onStart
中进行比onCreate
中执行更合适。 onCreate
能做的事onStart
其实都能做,但是onstart
能做的事onCreate
却未必适合做。
onStart方法和onResume方法区别
- 是否在前台。
onStart
方法中Activity
可见但不在前台,不可交互,而在onResume
中在前台。 - 职责不同,
onStart
方法中主要还是进行初始化工作,而onResume
方法,根据官方的建议,可以做开启动画和独占设备的操作。
onPause方法和onStop方法区别
- 是否可见。
onPause
时Activity
可见,onStop
时Activity
不可见,但Activity
对象还在内存中。 - 在系统内存不足的时候可能不会执行
onStop
方法,因此程序状态的保存、独占设备和动画的关闭、以及一些数据的保存最好在onPause
中进行,但要注意不能太耗时。
onStop方法和onDestroy方法区别
onStop
阶段Activity
还没有被销毁,对象还在内存中,此时可以通过切换Activity
再次回到该Activity
,而onDestroy
阶段Acivity
被销毁
为什么切换Activity时各方法的执行次序是(A)onPause→(B)onCreate→(B)onStart→(B)onResume→(A)onStop而不是(A)onPause→(A)onStop→(B)onCreate→(B)onStart→(B)onResume
- 一个
Activity
或多或少会占有系统资源,而在官方的建议中,onPause
方法将会释放掉很多系统资源,为切换Activity
提供流畅性的保障,而不需要再等多两个阶段,这样做切换更快。 - 按照生命周期图的表示,如果用户在切换
Activity
的过程中再次切回原Activity
,是在onPause
方法后直接调用onResume
方法的,这样onPause→onStop→onRestart→onStart→onResume
要快得多。
onSaveInstanceState和onRestoreInstanceState
两者执行时间
当targetSdkVersion
小于3时onSaveInstanceState
是在onPause
方法中调用的,而大于3时是在onStop
方法中调用的。而onRestoreInstanceState
是在onStart
之后、onResume
之前调用的**
onSaveInstanceState调用
- 在
Activity
被覆盖或退居后台之后,系统资源不足将其杀死,此方法会被调用; - 在用户改变屏幕方向时,此方法会被调用;
- 在当前
Activity
跳转到其他Activity
或者按Home键回到主屏,自身退居后台时,此方法会被调用。第一种情况我们无法保证什么时候发生,系统根据资源紧张程度去调度;第二种是屏幕翻转方向时,系统先销毁当前的Activity
,然后再重建一个新的,调用此方法时,我们可以保存一些临时数据;第三种情况系统调用此方法是为了保存当前窗口各个View
组件的状态。
onSaveInstanceState
的调用顺序是在onStop
中调用。
onRestoreInstanceState调用
- 在
Activity
被覆盖或退居后台之后,系统资源不足将其杀死,然后用户又回到了此Activity
,此方法会被调用; - 在用户改变屏幕方向时,重建的过程中,此方法会被调用。我们可以重写此方法,以便可以恢复一些临时数据。
onRestoreInstanceState
的调用顺序是在onStart
之后;
大多数的开发者都有想要自我提升的意识,只是在学习过程中找不到合适的方法,缺少专业的指导,容易半途而废,最终收获甚少,甚至开始自我怀疑,很难在短时间内学有所成。那么,作为Android 开发者,该怎样规划自己的学习路线,向中高级进阶呢?
这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶资料》,帮助大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
由于文章内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要《Android八大模块进阶资料》完整文档的可以加微信 即可免费领取!
PS:(文末还有使用ChatGPT机器人小福利哦!!大家不要错过)
《Android八大模块进阶笔记》
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。
全套视频资料:
一、面试合集
二、源码解析合集
三、开源框架合集
同时这里还搭建了一个基于chatGPT的微信群聊机器人,24小时为大家解答疑难技术问题。