activity生命周期

上图

一、Activity生命周期内的各个方法和作用


1、onCreate()
Activity生命周期里的第一个方法。
作用:创建activity,主要完成activity的一些初始化工作,如布局加载,控件初始化以及一些变量的初始化。这个时候activity还在后台,不可见。

个人理解:处于停止状态,为运行做准备

2、onStart()
Activity生命周期里的第二个方法。由不可见到可见时调用。
此时Activity可见,但是还没出现在前台,不能交互。(对这句话不是很理解,自己试了一下,在这个方法执行完后,你还是看不见activity,在onresume执行完后才能看见交互,希望有人理解后给我解释一下,此时activity可见到底指的是怎样可见)

个人理解:在不可见不能交互到可见不能交互会调用

3、onResume()
从可见不能交互,到可见能交互时调用,类似处于一种就绪的状态
4、onPause()
此时可见,但不能交互,在activity要跳转到另一activity或者退出程序时都会调用到。
个人理解:从可见能交互到可见不能交互,处于一种暂停的状态(一种情况:被另一个activity挡住,但是这个activity是透明的,还能看到这时只调用了onPause,而没调用onStop)
5、onStop()
在可见不能交互到不可见不能交互时调用,在activity要跳转到另一activity或者退出程序时都会调用到。
6、onRestart()
restart表示重新开始,Activity在这时 可见(这个可见跟上面onStart的可见一样不能理解),当用户按Home键切换到桌面后又切回来或者从后一个Activity切回前一个Activity就会触发这个方法。这里一般不做什么操作。
7、onDestroy()

这个阶段Activity被销毁,不可见,我们可以将还没释放的资源释放,以及进行一些回收工作。


亲测几种状态转换时主activity a调用过程,以下均为 standard模式,

程序启动,activity a首次启动,调用顺序onCreate()->onStart()->onResume()
单击home键,程序切到后台,调用onPause()->onStop()
回到程序,activity没有被销毁时,调用onRestart()->onStart()->onResume()
锁屏,调用onPause()->onStop()
解锁屏,调用onRestart()->onStart()->onResume()
跳转到另一activity b,调用a.onPause()->b.onCreate()->b.onStart()->b.onResume()->a.onStop()(activity b完成遮挡a,如果b挡不住a,a.onStop()不会调用)
返回键回到activity a,调用b.finish()->b.onPause()->a.onRestart()->a.onStart()->a.onResume()->b.onStop()->b.onDestory()
竖屏切横屏,调用onPause()->onStop()->onDestroy->onCreate()->onStart()->onResume()

二、方法对比

1、onCreate和onStart之间有什么区别?

(1)可见与不可见的区别。前者不可见,后者可见。
(2)执行次数的区别。onCreate方法只在Activity创建时执行一次,而onStart方法在Activity的切换以及按Home键返回桌面再切回应用的过程中被多次调用。因此Bundle数据的恢复在onStart中进行比onCreate中执行更合适。
(3)onCreate能做的事onStart其实都能做,但是onstart能做的事onCreate却未必适合做。如前文所说的,setContentView和资源初始化在两者都能做,然而想动画的初始化在onStart中做比较好。

2、onStart方法和onResume方法有什么区别?

(1)是否在前台。onStart方法中Activity可见但不在前台,不可交互,而在onResume中在前台。
(2)职责不同,onStart方法中主要还是进行初始化工作,而onResume方法,根据官方的建议,可以做开启动画和独占设备的操作。

3、onPause方法和onStop方法有什么区别?

(1)是否可见。onPause时Activity可见,onStop时Activity不可见,但Activity对象还在内存中。
(2)在系统内存不足的时候可能不会执行onStop方法,因此程序状态的保存、独占设备和动画的关闭、以及一些数据的保存最好在onPause中进行,但要注意不能太耗时。

4、onStop方法和onDestroy方法有什么区别?

onStop阶段Activity还没有被销毁,对象还在内存中,此时可以通过切换Activity再次回到该Activity,而onDestroy阶段Acivity被销毁

5、为什么切换Activity时各方法的执行次序是(A)onPause→(B)onCreate→(B)onStart→(B)onResume→(A)onStop而不是(A)onPause→(A)onStop→(B)onCreate→(B)onStart→(B)onResume

(1)一个Activity或多或少会占有系统资源,而在官方的建议中,onPause方法将会释放掉很多系统资源,为切换Activity提供流畅性的保障,而不需要再等多两个阶段,这样做切换更快。
(2)按照生命周期图的表示,如果用户在切换Activity的过程中再次切回原Activity,是在onPause方法后直接调用onResume方法的,这样比onPause→onStop→onRestart→onStart→onResume要快得多。

6、与生命周期密切相关的onSaveInstanceState方法和onRestoreInstanceState方法在什么时候执行?

通过阅读源码会发现,当targetSdkVersion小于3时onSaveInstanceState是在onPause方法中调用的,而大于3时是在onStop方法中调用的。
而onRestoreInstanceState是在onStart之后、onResume之前调用的。

一道面试题:
在什么情况下activity只执行onCreate(),而不执行onStart()
亲测在onCreate()中调用finish()。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值