Activity入门与理解第一章--生命周期

Activity是什么

首先你要理解Activity是什么,为什么我们需要它,Activity是Android非常重要的组成部分,号称Android四大组件之一,其地位可想而知,说的通俗一点,他就是一个门面或者是一个人的脸,普通用户打开App最先看到的就是Activity,用户可看不见我们所写的代码,他们只能看到我们设计好的App界面,所以Activity非常的重要,直接影响用户的使用感受和心情。

Activity初步理解--生命周期

一个人从出生到死亡,要经历很多的人生阶段,比如孩童时期,青年时间,壮年时期,暮年时期等等,Activity同理,它也有自己的生命周期,就像人一样,下面展示一张经典生命周期图:


20160717151833576.png

下面我们分别介绍一下各个生命周期:

onCreate(),onStart(),onResume()新Activity创建并展示的素质三连,他们按顺序执行,一个新的Activity如果想要创建成功并展示必须要经过这三个生命周期,不同的是,onCreate()只能执行一次,而onStart()和onResume()可以在整个生命周期中多次调用。
log如下:

QQ截图20180503230305.png

onPause(),顾名思义暂停,当一个Activiy暂停时调用此方法,比如新的activity启动时,老Activity就会调用这个方法,我们可以在这里做一些类似保存数据的操作或者关闭一些动画等操作。
onStop(),当Activity被别的Activity顶替的时候调用这个方法,它已经进入了后台,用户开不见它了,他就自我停止了。但是这个Activiy还可以抢救一下,再次活过来。
onDestory(),当Acitivity销毁的时候会调用这个方法,当调用这个方法的时候,就会有一种完了,全TM完了的感觉,生命到头了,已经抢救不了了,可以放弃治疗了,当然,这个方法只会执行一次,毕竟不可能死了以后还能再死一次。
onRestart(),重新开始,这是一个可以让onStop()的Activity重新焕发青春的一个方法,Acitivity从幕后重新的站在了我们面前,执行完毕后会重新调用onStart()和onResume()方法。

一些典型的生命周期流程

1.新Acitivity创建时:
onCreate()->onStart()->onResume()出生三连
2.当我们打开一个新的Activity(不透明)或者点击Home键时:
onPause()->onStop()
3.当我们新的Activity是透明的时候,我们看到的实际还是老Activit的内容,所以生命周期是(老Activity内心独白:老子还没有退居幕后呢,我还能在坚挺一下,不要让我stop):
onPause()
4.当我们点击返回键后,Activity的使命就完成了,就可以放心的该干嘛干嘛了:
onPause()->onStop()->onDestory()
5.完整的老Activity创建到新Activity的生命流程(没有关闭老Activity):


QQ截图20180503231115.png

6.Activity的横竖屏切换:
不设置Activity的Android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
设置Activity的android:configChanges=”orientation|keyboardHidden|screenSize”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
系统不同会导致切屏出现不同的反应,好像手机品牌不同也会出现不同的反应,具体的我也没有测试,如果朋友们有了解比较清楚的大牛,希望告诉小弟一声。

特殊的阶段onSaveInstanceState()和onRestoreInstanceState()

人有悲欢离合,月有阴晴圆缺,Activity同样也有很多的意料之外,经常一个活的好好的Activity就被Android爸爸给制裁了,当Activity突然暴毙的时候,我们不想损失Activity的数据,这时候我们就需要onSaveInstanceState()和onRestoreInstanceState()了,他们可以帮我们保存数据和回复数据。

onSaveInstanceState(Bundle outState)会在以下情况被调用:
1、当用户按下HOME键时。
2、从最近应用中选择运行其他的程序时。
3、按下电源按键(关闭屏幕显示)时。
4、从当前activity启动一个新的activity时。
5、屏幕方向切换时(无论竖屏切横屏还是横屏切竖屏都会调用)。

onSaveInstanceState()的作用是保存,调用突出一个特点--暴毙,也就是说我们主动的关闭这个Activity的情况下,不会调用onSaveInstanceState()
也就是说Activity在可能被系统回收的情况下,才会调用。

在前4种情况下,当前activity的生命周期为:
onPause -> onSaveInstanceState -> onStop。

onRestoreInstanceState的作用是恢复,调用的特点就是当确认Activity是暴毙而亡的时候(系统回收)并且重新创建了此Activity时,才会调用。
这时候细心地朋友可能就发现了onCreate()里也有Bundle参数,可以用来恢复数据,而onRestoreInstanceState也有一个,那他俩有什么区别呢。
区别在这呢:

因为onSaveInstanceState 不一定会被调用,所以onCreate()里的Bundle参数可能为空,如果使用onCreate()来恢复数据,一定要做非空判断。
而onRestoreInstanceState的Bundle参数一定不会是空值,因为它只有在上次activity被回收了才会调用。

如果想知道更多的关于onRestoreInstanceState()和onSaveInstanceState()可以参考:https://blog.csdn.net/fenggering/article/details/53907654
我也是参考的这位朋友的文章所写,大家可以去看看,讨论一下。

本文参考了几位朋友同行的文章,链接如下:

Android屏幕横竖屏切换和生命周期管理的详细总结:
https://blog.csdn.net/wenzhi20102321/article/details/68941263
Activity 的介绍和使用(一)
https://blog.csdn.net/litengit/article/details/51065442
如果有说的不对的地方或者错别字,希望各位能够留言告诉我,纠正我,我会在第一时间做出更改,在此感谢大家,希望各位都成为程序大牛,走上人生巅峰,赢娶白富美,你我共勉。

你可能感兴趣的:(Activity入门与理解第一章--生命周期)