前言
金三银四的季节到了,很多朋友都出去开始了自己的另一份职业生涯。在面试的时候,估计也会被问些
Android的基本问题。最常见的就是Activity的生命周期,Handler的原理,以及View的事件分发机制。
这里估计又得朋友就要说了,我们做项目的时候,没怎么用到Activity的生命周期啊。最多也就是在
onCreate()里做一些初始化的操作。在onDestroy()里做一些解绑的操作,比如EventBus的解绑。也几乎
没用到Handler啊,更别说View的事件分发了。在这里我想告诉这些朋友,这些都是基础,应该懂的知识就要
学习。毕竟现在Android程序员那么多,想要脱颖而出就要比别人懂得多。好了废话那么多,接下进入正题!
生命周期
我们看看源码中怎么描述这几个生命周期方法的。
-
onCreate和onDestroy onCreate和onDestroy.png
-
onStart和onStop onStart和onStop.png
-
onResume和onPause
onResume和onPause.png
详解
为什么要把这些方法在源码中的解释写一遍呢,因为很多人只知道这几个生命周期的顺序,却不知道他们具体是要
做什么的。还有的初学者,只会在onCreate方法里操作,其它的也不管。所以把源码中的注释拿出来想让大家知道,
具体作用。
onCreate:当Activity第一次创建时调用的方法,一般做布局加载,数据初始化的操作 。整个生命周期只执行一次!
onStart: 当用户可以看到Activity时调用。这时Activity已经可见,但是没有出现在前台,无法和用户交互。相对应的是onStop()方法。通过onResume方法,使Activity可以与用户交互。通过onStop 方法,使Activity隐藏,即不可见!
onResume: 在屏幕可见,并且可以和用户进行交互。此时,该Activity位于活动堆栈的顶部。相对应的是onPause()。
onPause:当系统即将恢复一个以前的Activity的时候调用。这个通常适用于提交未保存的持久性数据,停止动画和其他可能消耗CPU的东西,等等。这个方法的实现必须非常快,因此不适用于耗时操作,比如网络操作或者数据库操作。
onStop:当前Activity不再对用户可见时调用,相对于onPause,可以处理稍微重量级的回收工作,同样也不能做耗时操作。
onRestart:当Activity处于onStop不可见状态时。重新进入该Activity,会调用onRestart方法。将不可见的Activity执行onStart方法,从而变成可见状态!例如,当你打开一个Activity后,按Home回到桌面,这时执行了,onPause和onStop方法。再次回到这个Activity时,就会执行该方法。
onDestroy:生命周期中的最后一个方法,只执行一次。可以做一些回收工作和资源的释放。
几种情况
针对一个特定的Activity。分析下他的生命周期
- Activity的第一次启动,直到我们可以正常交互,分别执行了,onCreate,onStart,onResume
- 打开一个新的Activity或者按Home键回到桌面时。分别执行了,onPause,onStop。这里有一种特殊情况,就是新的Activity为透明主题时。之前的Activity不会执行onStop。因为我们对于onStop的定义是,可见,但是不处于前台。但是当我们
- 重新返回这个Activity。分别执行了,onRestart,onStart,onResume。
-
当退出当前Activity。onPause,onStop,onDestroy。
有的人可能要问了,假如我打开了一个Activity A。这时候我在打开一个 Activity B。那么这两个Activity的生命周期的执行顺序是什么呢!先执行,A的onPause,再执行B的onCreate,onStart,onResume,之后在执行A的onStop。当然之前也提到了,当B的主题为透明时。A不会走onStop方法。相应的由于没有走onStop方法,所以从B返回A的时候,直接从onPause,返回onResume方法!这是一种特殊情况!具体如下图!
Activity.gif