简述Activity的生命周期

人有生老病死,Android程序的活动Activity亦如此也会经历这个过程,这个就是我们常说的生命Activity的生命周期,当然我们将来会接触更多的活动,但是它们的原理都大同小异,都会有相似地方,下面让我们来看一下Activity的生命周期吧。

在我们的第一个android项目中我们什么都没有做,但是我们应该发现了一点问题,下面我先把代码贴出来:

MainActivity代码:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

疑问:

  • 在这个里面我们并没有看到我们熟悉的main()函数或者说main()方法,按我们以往的思路来看,main()函数(方法)是程序的入口,每个程序都应该有main()的,但是这个程序中我们并没有看到我们熟悉的main(),难道说,Android程序并不需要main()?
  • 无论我们的手机配置多高,运行速度有多快,总有那么几个应用打开速度极慢,有的是点击后稍微等那么几秒钟才会出现程序界面,有的是点击后很快的进入了,但是总有那么黑屏的几秒钟,这难道是手机硬件高低的问题?

OK,我们现在对这些疑问进行解释

在开篇,我们提到了生命周期,那么什么是生命周期呢?我们就以人来说吧,简单的概括人的一生就是,生,老,病,死!如果把我们之前所学的各种语言来拟人化的话,那么我们所熟悉的main()方法(函数)其实就是人的出生嘛,所以我们只需要在Android程序中找到我们程序的”出生”就好了,如果英语好点的同学当看到Create时肯定能第一反应出它的意思,没错它就是创建的意思,所以一个Activity是从onCreate()开始的(注意我这里说的是Activity而不是Android),既然是一个Activity的”出生”那么它所做的事儿就不可能会很多,就如人一样,当我们出生的时候,我们是什么都不会的,只拥有四肢,鼻子,眼睛,嘴,耳朵……我们并不能用我们稚嫩的四肢去进行跑步,跳跃,也不能用我们还没有长牙的嘴去吃各种坚果……等等吧,所以相对比来说的话,我们在onCreate()也不能进行一些复杂的操作,这样不符合客观规律嘛。

我们既然已经提了生命周期那么我们就将Activity完整的生命周期代码贴出来吧!

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onRestart() {
        super.onRestart();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

当我们突然之间看到这么多方法的时候是不是有一点小可怕呢,哈哈,其实,当博主第一次看到这个生命周期的时候也很害怕,毕竟博主的英语不如在坐的各位哈,其实呢,这个我们只要把方法名读懂就OK啦,现在我们挨个解释把!

onCreate():我们刚才其实已经大概的解释过它了,不过为了我们生命周期的完整性,我们还是决定解释一下它!这个方法是在活动第一次被创建时调用,在该方法中完成活动的初始化操作如:加载布局,绑定控件(既然是Activity的出生,那么若是我放入了一些比较耗时的操作那么我的这个Activity是不是就会”难产”了?也就是我们点击程序,它总会等待那么几秒才会打开的)。

onStart():这个方法在活动由不可见变为可见的时候调用(所以各位同学明白为什么有的程序在打开的时候总有那么几秒是黑屏的了吧,主要原因就是在这个方法中放入了一些比较耗时的操作)。

onResume():这个方法在活动准备好和用户进行交互的时候调用。此时的活动那个一定位于返回栈的栈顶,并且处于运行状态。在这个解释中出现了我们之前没听过的名词”栈”!,其实同学们可以暂且这么理解,我们的手机屏幕只有一块儿,一块儿屏幕只能显示一个Activity,显示的这一个Activity肯定是与我们交互的,当然在显示的这个Activity下面有可能还有N个Activity,那么栈就是存放这些Activity的一个”容器”,与我们交互的Activity就是位于这个容器的顶部,即栈顶!

onPause():这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。那么这个又是做什么的呢,看概念看的是不是有点晕?哈哈,其实我和你们一样,我也不喜欢看概念,那我们就来举个例子吧,在QQ中肯定不止有一个Activity对吧,那么当我们从我们的QQ主界面跳转到我们的好友动态界面的时候那么在QQ主界面中就调用了onPause()方法,试想一下,当我们在onPause()中处理了庞大的数据,那么会造成一个什么结果呢?首当其冲的就是,我点好友动态界面,没有反应,为什么呢?因为CPU在处理你在onPause()中放置的庞大的数据,导致CPU并不能完成你所让CPU所执行的操作,假如,你不去将CPU在QQ主界面消耗的资源所释放掉,我们在大胆些,我就不让它释放,不但不让释放,我还给CPU增加压力,让它处理更多QQ主界面的消息,数据,那么造成的结果是什么?界面跳转到好友动态界面了,但是CPU所有的资源还在为QQ主界面所服务,如此导致好友动态界面的效果并不能达到我们所要的效果,相反我们会非常的生气,有种想扔手机,骂开发者的冲动!哈哈,说了这么多,并没有想黑腾讯的意思哈,况且现在QQ做的还是不错的呢,只是为了帮助大家理解罢了。

onStop():这个方法在活动完全不可见的时候调用。和onPause()方法的主要区别在于,如果启动新的活动是一个对话框式的活动,那么onPause()方法会得到执行,而onStop()方法并不会执行。这个方法其实和onPause()是有点相似的地方的,都是跳转到其他页面,那么区别是什么呢,我们在使用QQ去分享一个图片,或者任何一个应用去分享一个图片或链接的时候,都是在Activity上面又弹出一个小的界面来,而且小的界面下面那个Activity并不会关闭,就如下:

在这种界面下,onStop()是不会执行的,但是onPause()方法却是会执行的,即:执行了onStop()方法则一定会执行onPause()方法,毕竟onPause()是系统准备去和启动或者恢复另一个活动的时候调用的。而onStop()方法则是系统已经准备好去启动或者恢复另一个活动(即onPause()已经执行完了)所需要的资源啦,才调用的。

onRestart():这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。这个方法简单说就是,从好友动态摁返回键啦,重新返回QQ主界面啦,那么会调用QQ主界面Activity的方法呢,肯定是onRestart()方法啦,那么执行这个方法的前提是什么呢,那就是在执行这个方法前该Activity肯定执行了onStop(),注意!并不是onPause(),一定是onStop()

onDestroy():这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。哈哈,这个方法我们只看名字就懂了嘛,当这个方法执行了,那么就代表执行这方法的程序,由活着变成了死亡,毕竟……已经执行了销毁嘛~

OK现在我们已经把Activity的生命周期做了一个简单的描述,但是只是文字描述的话,恐怕在我们的脑海中还形不成一个轮廓所以我就来一张Activity的生命周期图吧,希望大家能够理解的更深刻一些……

好了,这篇博客就到这里了,同学们若是有什么不懂的,可以在下面评论区中留言哈,我看到后会回的,另外对android有兴趣的同学可以加我们刘博主的群:555974449,群里面有很多大神的,而且很热情,很热心的,大家不懂的可以问的。

你可能感兴趣的:(android)