Activity的生命之路

时间:2024-01-15 14:53:50

Activity的生命之路

activity的生命周期这张图是最经典的了,下面我就说一下 这张图的脉络:

  第一条线我们这么走

onCreate→onStart→onResume→onPause→onStop→onDestroy

这条线路是这个activity走的最正常的一条路,说的就是一个activity的建立到退出的全过程。

  接下来这个图的几个分支:

onCreate→onStart→onResume→onPause→onStop→onRestart→onStart...

这条路是一个循环,我具体说下这个是遇到了什么情况才产生的现象,这个是当你开启一个activity时,这时通过点击该activity里的按钮或是其他事件启动了另一个activity,这时我们就假设之前的activity是甲,现在正启动的activity是乙,乙不可能一下子就能启动起来,他需要整合一些资源,就在这个时候,甲调用了onPause的方法,是自己停了下来,这个很可能是怕用户在这个期间再触发其他事件导致会产生一些问题,所以甲停了下来,然后乙准备好了,调用onCreate方法,接下来调用onStart方法,然后是onResume方法,等这一切都完事了,甲才调用onStop方法,接下来如果乙运行完毕,按了返回按钮,这个时候乙就会调用onPause方法,然后甲可以恢复了,甲调用onRestart方法,然后紧接着是onStart方法,甲调完之后,乙调用onStop方法,接下来是乙的onDestroy方法,这个周期就结束了,这个完事了之后不知道你有没有发现,一旦是遇到什么情况,当前的activity首先要做的就是onPause方法,接下来就是等待,等待对方初始化完毕,然后就继续接下来的内容,就有点像一个人再干一件事情,正干着呢,他的朋友突然来了,说你歇会吧,然后他就先停下,但只是放下了手头上的工作,但并没有离开,当朋友把准备工作做完之后,他就下去换上他的朋友,这对所有的窗体都好用吗,并不是,这里要纠正一点,Dialog这个特殊的类型,他与activity没有什么关系,他更像是一个View的组件,如果他出现挡住了一个activity,那这个activity将不理他,什么也不处理,该干啥继续干啥,所以有些人说onPause方法是用来使activity失去焦点的这句话并不完全准确,因为当dialog出现,activity同样会失去焦点,但是他并没有回调onPause函数。

  下面这条路:

onCreate→onStart→onResume→onPause→onResume...

这依旧是一条循环,这个和前面说的那个dialog遇到的情况有些像,只不过这次的不是普通的弹出dialog挡住的界面,而是一个基于activity的主题对话框,实际上对话框大致来说应该分两种,一个是弹出对话框,就是刚刚说的那个,现在要说的刚好是另一个,是主题对话框,主题对话框是基于activity的,所以,当一个activity甲正在运行的时候,通过某些事件产生了一个主题对话框,这个时候,activity会立刻调用onPause,接下来,这个对话框出现了,然而后边的activity并不会调用onStop,因为主题对话框虽然基于activity,但是它并不能占据整个屏幕,所以后边的activity还是有露出来的一部分的,所以activity值调用onPause,当按返回键的时候,那个主题对话框没了,然后activity会调用到onResume函数,回到之前的状态。

  下面:

onCreate→onStart→onResume→onPause→onStop→onCreate...

  同样也可能是

onCreate→onStart→onResume→onPause→onStop→onDestroy→onCreate...

这两种情况是差不多的,可以打个比方,当一个activity处于onResume的时候,这时按了home键,我们知道,他接下来会调用onPause,onStop方法,这时我们将进程杀掉,再通过home回来,会发现该activity又重新调用了onCreate方法,同理,当一个activity处于onResume的时候,这时用返回键一次一次的退出,最后将程序完全退出,这个时候activity就会调用到onDestroy方法了,这个时候如果突然将进程杀死,然后再回来,会发现activity还是从onCreate调起的。

  好了,以上是我对activity的一路走来的理解,网上的介绍很多,这是我个人的理解,希望大家多多给予意见如果哪里有争议,麻烦提出来。