您的位置:首页 > 其它

Activity生命周期的通俗理解

2016-04-05 21:59 288 查看

如何更好地理解Activity生命周期

Activity 生命周期是我们最常见的东西,刚开始学 Android 的时候往往都是在 Activity 的 onCreate() 方法里做一些工作,但是为什么在这里面做呢?其他方法是干嘛的呢?刚开始学习的时候往往不够深入去理解这些知识。下面就通过我学习的过程做的一些笔记,希望对我们能够有所帮助。

官方 Activity 生命周期的解释

通俗 Activity 生命周期的解释

onStart() 和 onResume() 的区别(onPause() 与 onStop())

onCreate() 和 onRestart() 的区别

正常与异常情况下的 Activity 生命周期

官方 Activity 生命周期的解释

如图片所示,大家都会在各大博客和书籍上都看过,并且讲的很详细,这里就不再重复啦。其中一个传送门



通俗 Activity 生命周期的解释

但是每一步每一个方法是干嘛的呢?我们现在来按顺序说说。

onCreate()

它的构造函数可以抽象成下面这样

onCreate()
{
createNecessaryObjects();//创建必要的对象

prepareObjectsForDisplay();//准备显示
}


是不是有点明白了?其实它做的工作就是创建对象和准备的工作,所以一些初始化的工作都会在onCreate()的方法里面完成。

onStart()

这时候Activity 正在启动,我们通常看到书上和博博客上看到别人用“可见”这个状态来描述这时候的Activity ,但是“可见”怎么理解呢?我举个例子,比如一个叫隔壁老王的人站在你前面,但是他前面有个毛玻璃,你只能透过毛玻璃看到他,这就是“可见”的状态。(这时候你想打他的时候还打不到他,为什么说要打他呢?看到下面你就会知道)

对应我们的安卓系统,在app上有一个窗口弹出来,但是app的界面除了窗口遮挡的部分你是可以看到它的,就在这个窗口下面,不过这时候你却不能操控app界面了,只可以操控弹出来的窗口是不是?这时候那个app界面就是处于“可见”状态。而那个窗口就相当于上面的毛玻璃。

在这个阶段呢,Activity 处于“可见”状态,只不过还没显示到我们的手机屏幕上。

onResume()

这个阶段 Activity “可见”并且已经处于我们的手机屏幕上了,这时候就可以可 Activity 进行交互了。就相当于隔壁老王前面那块毛玻璃已经被拿走了,你可以和他进行交互(打他)了。

到此为止,一个新的 Activity 就被创建并且显示在我们的手机屏幕上,我们可以和它愉快的进行玩耍了。

onPause()

这时候的 Activity 正在被停止。这时候已经不能够和 Activity 进行交互了,可以理解为隔壁老王前面那块毛玻璃又加上去了,你之前没打他现在就不能打了,但是任然“可见”。除了别的书籍和博客介绍的,有个值得注意的地方是此 Activity 的 onPause() 方法执行完之后,新 Activity 的onReasum() 方法才会执行,所以为了用户体验,不应该在 onPause() 方法里面执行一些太耗时的工作,不然新的 Activity 迟迟没显示出来用户就再也不用这个软件啦。

onStop()

这时 Activity 即将停止了,已经变得“不可见”了。隔壁老王已经被你打的半死不活了,送走了···

onDestroy()

Activity 即将被销毁掉了。然后 Activity 就被关闭掉了。

所以,上面那张图对应理解过来就是如下图所示了:



这样子能理解每个方法的不同之处在哪里了吗?

onStart() 和 onResume() 的区别

经过上面的介绍,onStart() 和 onResume() 的区别就是他们之间一个用户可以与 Activity 进行交互而另外一个却不能。

onCreate() 和 onRestart() 的区别

你们会不会好奇为什么来个 onCreate() 就好了,还要再多一个 onRestart() 呢?他们的区别是什么?为什么还要 onRestart() 再到 onStart() 呢?

我么你其实可以把onRestart()的构造函数看成是这样:

onRestart()
{
prepareObjectsForDisplay();//准备显示
}


和上面给出的 onCreate() 的抽象构造函数有什么区别?对,就是少了个 createNecessaryObjects() 的函数,就是说我们在 onStart() 之前呢,还是需要进行一些准备显示的工作的。但是呢,由于 onCreate() 已经帮我们做了一些初始化的工作的,我们就不需要再去做了。

正常与异常情况下的 Activity 生命周期

正常

第一次调用:onCreate() -> onStart() -> onResume()

回到桌面&打开新的 Activity :onPause() -> onStop() (注意这时候原 Activity onPause() 之后新 Activity 才 onResume())

按下back键:onPause() -> onStop() -> onDestory()

屏幕横竖变换: onPause() -> onStop() -> onDestory() -> onCreate() -> onStart() -> onResume()

异常

异常情况下我们可以重写

onSaveInstanceState()
onRestoreInstanceState()


来进行保存信息,其实屏幕横竖变换也算是属于异常情况下的一种。

屏幕横竖变换: onPause() -> onSaveInstanceState() -> onStop() -> onDestory() -> onCreate() -> onStart() -> onRestoreInstanceState()-> onResume()

在保存信息方面虽说是 Activity 调用 onSaveInstanceState()&onRestoreInstanceState() 方法进行信息保存,实际上是 Activity 会委托 Window 去保存数据,Window 再委托上面的容器去保存数据,容器再委托子View去保存数据。

新手第一篇文章,有不足错误之处还望大家指正,多多交流~

参考:

stackoverflow:http://stackoverflow.com/questions/4553605/difference-between-onstart-and-onresume

Android开发艺术探索-任玉刚
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: