概述

有图有真相,所以先上图:

上图是从Android官网截下的Activity的生命周期流程图,结构非常清晰,它描述了Activity在其生命周期中所有可能发生的情况以及发生的先后顺序,下面就将结合此图详细介绍一下Activity的生命周期。
--- ---

Activity四大基本状态

Activity生命周期一般分为四个基本状态,分别是活动状态(running),暂停状态(paused),停止状态(stopped)和死亡状态。

  1. 活动状态(running)
    活动状态一般是指该Activity正处于屏幕最显著的位置上显示,即该Activity是在Android活动栈的最顶端。
    一般地当Activity 创建后就是处于该状态中。
    期间触发的函数及顺序为: onCreate() ->onStart() -> onResume()。
    其中:
    onCreate()只有在该Activity是第一次被创建时才会被调用,主要是负责Activity的一般性的初始化设置,包括视图的创建,数据的绑定等等。需要注意的是若之前有冻结的state(即系统对该Activity调用过onSaveInstanceState()函数),则可以通过其 Bundle 参数进行state恢复。
    onStart()是当Activity正在变为可见状态时才会被调用。一般地在此期间可以注册一个广播等等。
    onResume()是在该Activity将要和用户进行交互时被调用,此时Activity位于的活动栈顶部。

  2. 暂停状态(paused)
    暂停状态一般指该Activity已失去了焦点但仍然是可见的状态(包括部分可见)。一个处于暂停状态的Activity只有在系统极度缺乏内存资源的情况下才会被系统强制结束。
    运行状态到暂停状态所触发的函数及顺序为:onResume() -> onPuased()。
    暂停状态恢复至运行状态所触发的函数及顺序为:onPuased() -> onResume()。
    其中:
    onPuased()是当一个Activity失去系统焦点后将会被调用,包括见面被部分遮挡,以及设备转入休眠状态等等。一般地在此期间对一些未保存的数据进行持久化并停止其他需要耗费CPU的操作,同时不可进行耗时操作,否则会阻塞系统UI线程。

  3. 停止状态(stopped)
    停止状态一般指该Activity被另一个Activity完全覆盖的状态,这是它仍然保持所有的状态,但是由于该Activity变得不可见,所以系统经常会由于内存不足而将该Activity强行结束。
    暂停状态到停止状态所触发的函数及顺序为:onPuased() -> onStop()。
    停止状态恢复至运行状态所触发的函数及顺序为:onStop() -> onRestart() -> onStart() -> onResume()。
    其中:
    onStop()是当一个Activity变为不可见时将会被调用,此时可能是由于该Activity要被注销或新的Activity完全遮挡了该Activity。在此期间一般可以进行取消注册广播等操作,因为用户不可见。
    onRestart()是当一个Activity从停止状态恢复至运行状态时将会被优先调用。
  4. 死亡状态
    死亡态是指该Activity被系统销毁。当一个Activity处于暂停状态或停止状态时就随处可能进入死亡状态,因为系统可能因内存不足而强行结束该Activity。
    停止状态到死亡状态分为两种情况:(1)由用户操作导致,则执行:onStop() -> onDestroy()。(2)由系统自动强制执行,则该Activity被强行结束。
    其中:
    onDestroy()是当一个Activity正在被系统finished期间被调用的。
    --- ---

    Activity七大生命周期函数

    Activity一共有七个生命周期函数,分别为onCreate(),onRestart(),onStart(),onReusme(),onPause(),onStop(),onDestory()。它们的被调用的情况以及作用已在上一段中进行了相关的介绍分析,在此就不再赘述。
    其实在一个Activity整个生命周期中上述七大生命周期函数并不是一定都会被执行的,有时由于系统内存不足的缘故,部分生命周期函数将会被跳过不执行。
    一般地onCreate(),onRestart(),onStart(),onReusme()这四个函数是不能被系统跳过不执行的,而onDestory()函数在系统内存不足时,该函数将直接被系统跳过不执行。
    onPause()函数比较特殊,即使在系统内存不足时,也一定会执行完该函数后其Activity才会被强制结束,原因是下一个Activity在等到该函数结束前前是不会继续进行。所以该函数常常用于对数据的持久化操作,同时也禁止进行任何耗时的操作。
    onStop()函数则最为特殊,当Android的运行环境为HONEYCOMB即3.0之前的版本时,onStop()函数是可以被系统跳过不执行的。但是在HONEYCOMB即3.0之后的版本,onStop()函数和onPause()函数一样不能被跳过不执行。
    --- ---

    切换横竖屏触发的生命周期事件

  5. 不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。
  6. 设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。
  7. 在Android3.2之前,设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。但在Android3.2及其之后,仍会重新调用各个生命周期一次,因为screen size也开始跟着设备的横竖切换而改变。
  8. Android3.2及其之后,设置Activity的android:configChanges="orientation|keyboardHidden|screenSize“,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
    --- ---

    总结

    关于Android中四大组件之一Activity的生命周期简介就先写到这里了,其实还有很多方面没介绍到,例如对于onSaveInstanceState()函数和onRestoreInstanceState()函数的用法以及与onPause()函数间的区别都没涉及,下次有机会再好好总结,不行了实在是困死了,最后若本文有所疏忽及不当之处欢迎大家指正。
    --- ---

查看原文:http://www.xyczero.com/blog/article/7/.

Android之Activity生命周期简介的更多相关文章

  1. Android开发——Activity生命周期

    Android开发--Activity生命周期 Activity作为四大组件之首,也是使用最频繁的一种组件.本文将主要讲解Activity生命周期,包括正常情况下的Activity生命周期和异常情况下 ...

  2. android开发------Activity生命周期

    这几天工作比较忙,基本没有什么时间更新播客了. 趁着今晚有点时间,我们来简单说一下什么是Activity生命周期和它们各阶段的特征 什么是生命周期 在还没有接触android开发的时候,听到有人说Ac ...

  3. Android编程: Activity生命周期和LogCat使用

    学习内容:Activity生命周期和LogCat使用 ====Activity生命周期==== 图示(转载): 创建    onCreate重启    onRestart开始    onStart恢复 ...

  4. Android开发--Activity生命周期回顾理解

    Activity和Servlet一样,都用了回调机制.我们通过类比servlet来学习Activity.当一个servlet开发出来之后,该servlet运行于Web服务器中.服务器何时创建servl ...

  5. android 17 activity生命周期

    手机指南针传感器处于手机头部. Activity生命周期: 启动. onCreat()方法:初始化布局对象,设置监听器. onstart()方法:注册监听器. onResume():activity已 ...

  6. 浅谈Android之Activity生命周期

     Activity作为四大组件之一,出现的频率相当高,基本上我们在android的各个地方都能看见它的踪影,因此深入了解Activity,对于开发高质量应用程序是很有帮助的.今天我们就来详细地聊聊Ac ...

  7. 【Android】Activity 生命周期具体解释

    与其它编程模式不同,android中的Activity没有main()函数.我们无法决定Activity的创建和销毁过程,Activiy的创建和销毁(即生命周期)由系统完毕,系统会在Activity的 ...

  8. Android关于Activity生命周期详解

    子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精 ...

  9. Android之Activity生命周期详解

    Activity的生命周期方法: onCreate()--->onStart()--->onResume()--->onPause()--->onStop()--->on ...

随机推荐

  1. NOI题库2454 雷涛的小猫

    2454:雷涛的小猫 总时间限制: 20000ms 单个测试点时间限制: 10000ms 内存限制: 65536kB 描述 雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样 ...

  2. mysql 一般操作

    mysql -u root -p ->mysql show databases; ->mysql use [database_name]; ->mysql show tables; ...

  3. [Audio processing] wav音频文件读取int和double数组的关系

    直接读取wav文件是int数组,但是有一些实现返回的是double数组,还有些输入是double数组:那我们要互相调用的时候还是要看看两者到底有什么关系,其实很简单. 以单身道,16bit为例 /** ...

  4. C++设计模式---职责链模式

    职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿这条链传递该请求,直到有一个对象处理它为止. 这里发出这个请求的客户端并不知道这当中的哪一 ...

  5. [Unity3d][NGUI]两种思路解决AssetBundle的依赖关系.

    接上文. 使用上文中的AssetBundle打包方式生成的文件包括了依赖关系中的文件. 一般的使用中并不会发现什么问题. 可是当配合NGUI的时候,使用dynamicFont时打包AssetBundl ...

  6. Android中关于Task的一些认识

    Android中Task是一个逻辑上的概念,简单地说,就是一个栈里面顺序存储着的多个Activity.这些Activity能够是来自同一个App,也能够是来自不同的Apps. Task的创建 比方之前 ...

  7. ExtJS4.2学习(6)——基础知识之proxy篇

    本次讨论下数据代理,其实个人第一次听到这个短语的时候,并不是特别的适应,在英语中的含义是proxy,其实如若大家也觉得不适应的话,就直接称呼proxy吧. 在ExtJS中,proxy是进行数据读写的主 ...

  8. 代码讲解Android Scroller、VelocityTracker

    在编写自定义滑动控件时常常会用到Android触摸机制和Scroller及VelocityTracker.Android Touch系统简介(二):实例详解onInterceptTouchEvent与 ...

  9. Quarts SimpleTrigger going to BLOCKED state after few repeat intervals--stackoverflow

    question: I am using SimpleTrigger to schedule a job which is supposed to run indefinitely (repeat c ...

  10. android高效ORM数据库框架greenDao使用

    因为项目中多处用到了数据库,需要对数据库频繁的读写操作,虽然android 自带的SQLiteOpenHelper的.这种方式比较方便易懂,但是在使用过程中需要写很多的sql语句,而且需要及时的关闭和 ...