Android中Activity的生命周期

刚刚在stormzhang的一篇叫 android学到哪种程度可以去找工作中看到张哥提了这么一个观点如果我问你Android中Activity生命周期你还支支吾吾的那我就对你没什么兴趣了。吓得我赶紧在脑海中回顾了下有关activity生命周期的知识,便打算趁热打铁写下自己对activity生命周期的理解。

1.Activity形态

Activity一个最大的特点就是拥有多种形态,它可以在多种形态间进行切换,以此来控制自己的生命周期。

  • Active/Running
    这时候,Activity处于Activity栈的最顶层,可见,并与用户进行交互。
  • Paused
    当Activity失去焦点,被一个新的非全屏的Activity或者一个透明的Activity放置在栈顶时,Activity就转化为Paused形态。但它只是失去了与用户交互的能力,所有状态信息,成员变量都还保持着,只有在系统内存极低的情况下,才会被系统回收掉。
  • Stopped
    如果一个Activity被另一个Activity完全覆盖,那么Activity就会进入Stopped形态。此时,它不再可见,但却依然保持了所有状态信息和成员变量。
  • Killed
    当Activity被系统回收掉或者Activity从来没有创建过,Activity就处于Killed形态。
    由此可见,用户的不同动作,会让activity在这四种形态间切换。而开发者,虽然可以控制Activity如何“生”,却无法控制Activity何时“死”。

2.Activity生命周期

Google给了我们一张图来揭示Activity生命周期,如图。

程序启动运行并结束上述生命周期的方法执行顺序是这样的:
onCreate()–>onStart()–>onResume()–>onPause()–>onStop()–>onDestroy(),这张经典图众所周知,开发者当然不必实现所有的生命周期方法,但知道每一个生命周期状态的含义,可以让我们更好地掌控Activity,让它能更好地完成你所期望的效果。

  • onCreate():创建基本的UI元素。
  • onPause与onStop:清除Activity的资源,避免浪费。
  • onResume():需要重新初始化在onPause()中释放的资源。
  • onStart():每当Activity由不可见到可见时,都会调用该方法。
  • onRestart():需要初始化在onStop()中释放的资源。
  • onDestroy():当活动完成或者被系统销毁的时候会调用该方法。

3.总结

  1. 在系统调用onCreate()方法之后,就会马上调用onStart()方法,然后继续调用onResume()方法以进入Resumed状态(也就是前面说的Active/Running形态),最后就会停在Resumed状态,完成启动。
  2. 当栈顶的Activity部分不可见后,就会导致Activity进入Pause形态,此时就会调用onPause()方法,当结束阻塞后,就会调用onResume()方法来恢复到Resume形态。
  3. 当栈顶的Activity由部分不可见(调用onPause())到完全不可见(调用OnStop())或者从可见(调用onResume())到完全不可见时,也就是停止过程,此时系统会调用onPause()方法和onStop()方法。

另外,由图可知,从可见到不可见中间一定会经过部分不可见也就是一定会调用onPause()方法,而不能直接从可见跳到完全不可见,可见系统在Activity不可见的时候一定会调用onPause()方法;而当Activity由不可见到可见时,系统会通过顺序依次调用onStoped()–>onRestart()–>onStart()。

以上便是我对Android 中Activity生命周期的理解。

2018.3.19更

欢迎加入我的Java交流1群:659957958。群里目前已有1800人,每天都非常活跃,但为了筛选掉那些不怀好意的朋友进来搞破坏,所以目前入群方式已改成了付费方式,你只需要支付9块钱,即可获取到群文件中的所有干货以及群里面各位前辈们的疑惑解答;为了鼓励良好风气的发展,让每个新人提出的问题都得到解决,所以我将得到的入群收费收入都以红包的形式发放到那些主动给新手们解决疑惑的朋友手中。在这里,我们除了谈技术,还谈生活、谈理想;在这里,我们为你的学习方向指明方向,为你以后的求职道路提供指路明灯;在这里,我们把所有好用的干货都与你分享。还在等什么,快加入我们吧!

2018.4.21更:如果群1已满或者无法加入,请加Java学习交流2群:305335626 。群2作为群1的附属群,除了日常的技术交流、资料分享、学习方向指明外,还会在每年互联网的秋春招时节在群内发布大量的互联网内推方式,话不多说,快上车吧!


4.联系

If you have some questions after you see this article,you can tell your doubts in the comments area or you can find some info by clicking these links.

坚持原创技术分享,您的支持将鼓励我继续创作!