前言
金三银四的季节到了,很多朋友都出去开始了自己的另一份职业生涯。在面试的时候,估计也会被问些 Android的基本问题。最常见的就是Activity的生命周期,Handler的原理,以及View的事件分发机制。 这里估计又得朋友就要说了,我们做项目的时候,没怎么用到Activity的生命周期啊。最多也就是在 onCreate()里做一些初始化的操作。在onDestroy()里做一些解绑的操作,比如EventBus的解绑。也几乎 没用到Handler啊,更别说View的事件分发了。在这里我想告诉这些朋友,这些都是基础,应该懂的知识就要 学习。毕竟现在Android程序员那么多,想要脱颖而出就要比别人懂得多。好了废话那么多,接下进入正题!
生命周期
我们看看源码中怎么描述这几个生命周期方法的。
onCreate和onDestroy
onCreate和onDestroy.png
一个Activity的完整生命周期发生在第一次调用onCreate()直到调用onDestroy()之间。Activity将在onCreate()里设置所有的状态。在onDestroy()里释放剩余的资源文件。例如如果有一个线程运行在后台,正在从网络上下载数据。他可能创建这个线程在onCreate(),停止这个线程在onDestroy()。
onStart和onStop
onStart和onStop.png
Activity可见的生命周期,发生在onStart()和onStop()这两个方法之间。在这期间用户可以看到Activity在屏幕上,尽管它可能不在前台并且没办法和用户交互。在这两个方法中间可以维护这个Activity展示给用户的一些资源。例如,你可以注册一个广播在onStart()方法用于监控你的UI的变化。你可以在onStop()中解绑,当用户长时间没有看你展示的界面的时候。onStart()和onStop()方法能够被多次调用,当Activity变得可见或者隐藏的时候。
onResume和onPause
onResume和onPause.png
Activity前台生命周期,发生在onResume和onPause方法之间。在此期间,Activity在其他Activity的前面,并可以与用户交互。一个Activity可以经常往返于resume状态和pause状态之间。例如,当设备进入睡眠状态时,或者当一个Activity结果被交付时,或者当一个新的意图被交付时。因此这些方法中的代码应该是相当轻量级的。
详解
为什么要把这些方法在源码中的解释写一遍呢,因为很多人只知道这几个生命周期的顺序,却不知道他们具体是要 做什么的。还有的初学者,只会在onCreate方法里操作,其它的也不管。所以把源码中的注释拿出来想让大家知道, 具体作用。
Activity生命周期
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
作者:BurdeNing
链接:https://www.jianshu.com/p/200025a292e3