初学者都应该看的 --- Activity的生命周期

来源:互联网 发布:ubuntu网卡驱动 编辑:程序博客网 时间:2024/06/06 17:12
本文章只是为了记录以前自学时,所遇到的问题和不懂的地方,让android自学者能清楚的了解activity的生命周期,看看我们自学那会遇到的,是不是一个问题

  • 什么是Activity

    Activity 大部分人都叫活动,可我个人觉得,Activity其实就是一个容器的,里面装载着各种各样的view视图,并且对各种视图进行事件处理,信息的控制等

  • 什么是activity的生命周期

    首先明白一点,生命周期强调的是周期,说白了,就是它的出现到消灭,那什么要有它的生命周期呢,为什么不直接创建,再null,不就完成整个生命周期了吗?但是别忘记了,activity是androd手机系统的4大组件之首,
    一,我们的app是为了用户使用,你直接new,再null,还有什么意义呢,
    二,activity是4大组件之首,是直接与用户交互的,它直接销毁了,那还谈什么交互,我们肯定要有一个完整的生命周期,让我们合理的使用activity, 充分利用它的生命周期,让它在每个生命阶段完成它该要做的事。

  • 大家来看一张图,我自学android那会最讨厌看到的,因为我看不懂,但是请大家一定要用心看,真的很有用, 而且必须要看,不然会吃亏,别问我怎么知道的

这里写图片描述

让我来带着大家,看这个图,也许跟着我看,会有不一样的视角和新的认识


activity正常情况下

从activity正常的活动周期来看,什么意思呢,就是它一生,没有遇到坑,从出生到死亡,活得都很好,那怎样看呢,直接看图中间的方法关键字
Activity Launched –> onCreate() – > onStart() –> onResume –> onPurase() –> onStop() –> onDestory() –> Activity shut down

我们先看这几个方法,其它先不用看,我们先看的是activity正常生命周期的时候


Activity Launched : 这个的是意思是activity启动,记住,只是启动,它还没有任务生命周期的特征

onCreate() : 我们的第一个生命周期,这个是说,我们的activity创建时被调用 ,但是并不是说这个方法创建了activity,记住,也只是创建时这个方法被调用而已,现在什么在界面上也看不到,那它的作用是什么呢,什么也看不到,当然是做准备工作了,比如创建视图对象,这个知道为什么setcontentview在这里写了吧,就是做准备工作的,其它不是它该做的事,同样还有加载数据等等所有的操作都在这里执行。

onStart(): 这个方法是我们的activity进入可见状态,但是,这个时候还不能交互,也就是说在这个状态下,你在界面上做什么,都没有反应,那这个方法,我们有什么用呢,我们可以做一些初始化,

     那就有人问了,刚刚说oncreate方法就是初始化的啊,怎么在这也可以初始化,感谢你有这种想法,我以前学习生命周期的时候,也是,怎样也不懂,一会这样,一会那样,但是,就是可以,没有为什么,大家学了那么久,没有感觉到大部分问题的答案都是没有为什么,本来就是那样的,好吧,继续,是可以初始化的,但是呢,是非严格必须的东西,比如可以在这里注册广播接收者等。

onResume(): 这个方法,是所有activity的生命周期的最终期待,因为它这个时候,已经可以进行交互了,在这里能看到最终的布局效果,这是大家都期待的,大家可以测试一下,一个界面的显示,是从oncreate -> onstart -> onResume 一下走了三个方法,才可以进行交互的时候

onPause() : 这个方法是不好了,因为这个方法,表示当前activity不能交互了,就是说不能响应用户操作了,但是,这个时候,activity还是可以看到的,在这里,可以暂停动画等界面效果,

   有人就说了,不能交互但是可以看到,是什么东西,其实就是有其它窗口遮盖了acitivity,比如一个对话框出现 ,后面的activity是可以看到的,但是不能交互

onStop():这个方法表示activity已经不可以看到了,什么不可见了,在这里,我们应该保存数据,停止一些消耗资源的事件,防止在不可见状态下被回收

onDestroy(): 这个方法就一切完了,这个方法将销毁所有视图,在这里应该释放一切占用的资源,比如 停止播放,网络请求等所有操作,只是销毁视图,不是销毁 activity 对象,

以上,就是一个activity正常情况下,所经历的生命周期,就像一个人一样,从出生(onCreate),童年(onStart)青年(onReume),中年(onPaused),老年(onStop),死亡(onDestory), 但是,这样只是acticity所经历的生命周期时的方法,不是说oncreate就是activity被创建了,onDestory时,activity就被销毁了,只能说oncreate方法,就在actictity已经被系统创建后,调用了oncreate方法而已,而activity消失是gc的事,和onDestory更没有关系,请记住!

下面,我们继续讨论activity不正常的时候, 它经历了哪些方法,大家现在再看一下图,我们刚刚已经分析了中间的那几个方法,还剩下两个的方法

activity不正常情况下:

什么叫不正常情况下,就是说,一个人好好的走路呢,属于正常走路的情况,突然有事找他,或者这家伙打的走了,都不属于正常的走路情况

activity正常情况一:

有多个activity出现的时候,我们刚刚已经知道,我们的activityA是在onResume方法进行与用户交互的,这个时候用户不想和我们的activityA进行交互了,想与activityB进行交互,怎样办啊,没办法,用户是上帝,那我只好让activityB喽,那我该怎样让呢,别忘记了,我们现在还和用户交互呢,只不过我们在0.01秒后,不和用户交互,那我就先让自己停下onpaused , 现在这个时候,我还是可以看到的,所以 onstop方法没有被调用,有人说了,activityB都出现了啊,是,你说的是,但是你说了,是activityB都出现了,activityA不应该出现的啊,对了,看activityB出现的时候,activityA才不可见!这个时候才调用activityA, onstop方法,很多人在这里不清楚,觉得是B出现之前, A的onstop方法已经被调用,其实不是, 是B出现了,A才调用onstop方法的, 当B不见时,这个时候activtyA调用onrestart方法 -》 onstart 方法 - 》 onresume方法,等等,这样就和图中一致了吧

activity正常情况二:

activity也有不老实的时候,这个时候,系统就直接kill,强制gc它,这个可能性很小

现在再看这个图的时候,是不是清楚多了,从activity正常情况下,是走中间的几个方法,两个不正常的情况走两边 ,但是: 真正工作中,99%只是用两个生命周期方法 oncreate ondestory, 哈哈

1 0