概述
有图有真相,所以先上图:
上图是从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()函数一样不能被跳过不执行。
切换横竖屏触发的生命周期事件
1.不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。
2.设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。
3.在Android3.2之前,设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。但在Android3.2及其之后,仍会重新调用各个生命周期一次,因为screen size也开始跟着设备的横竖切换而改变。
4.Android3.2及其之后,设置Activity的android:configChanges=”orientation|keyboardHidden|screenSize“,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
总结
关于Android中四大组件之一Activity的生命周期简介就先写到这里了,其实还有很多方面没介绍到,例如对于onSaveInstanceState()函数和onRestoreInstanceState()函数的用法以及与onPause()函数间的区别都没涉及,下次有机会再好好总结,不行了实在是困死了,最后若本文有所疏忽及不当之处欢迎大家指正。
本文向大家介绍Android中Activity的生命周期探讨,包括了Android中Activity的生命周期探讨的使用技巧和注意事项,需要的朋友参考一下 1、完整生命周期 上图是Android Activity的生命周期图,其中Resumed、Paused、Stopped状态是静态的,这三个状态下的Activity存在时间较长。 (1)Resumed:在此状态时,用户可以与Activity进行交
本文向大家介绍Android Activity生命周期详解,包括了Android Activity生命周期详解的使用技巧和注意事项,需要的朋友参考一下 Activity 的生命周期。 一、理解Activity Activity是Android程序的4大组件之一。 Activity是Android程序的表示层。程序的每一个显示屏幕就是一个Activity。 学过WEB开发的同学,可以把Activit
本文向大家介绍android基础总结篇之一:Activity生命周期,包括了android基础总结篇之一:Activity生命周期的使用技巧和注意事项,需要的朋友参考一下 近来回顾了一下关于Activity的生命周期,参看了相关书籍和官方文档,也有了不小的收获,对于以前的认知有了很大程度上的改善,在这里和大家分享一下。 熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的ser
4.3.1.Activity 生命周期 因为涉及到新建Linux进程、为UI对象申请内存、解析XML文件以及最终的图像渲染,初始化Activity的成本是比较高的。既然在初始化上面花了这么大功夫,那么每次离开Activity就将其销毁就未免太浪费了。在这方面,Android引入了Activity Manager机制,用以自动管理Activity的生命周期。 Activity的创建、销毁、管理皆由A
Activity生命周期 总论 了解Activity的生命周期,需要了解: 四种状态 七个重要方法 三个嵌套循环 其他 首先在开头放出生命周期的一张总图: 四种状态 四种状态包括 活动(Active/Running)状态 暂停(Paused)状态 停止(Stopped)状态 非活动(Dead)状态 1. 活动(Active/Running)状态 当Activity运行在屏幕前台(处于当前任务活动栈
Activity生命周期 在上面的图中存在不同状态之间的过渡,但是,这些状态中只有三种可以是静态,也就是说 Activity 只能在三种状态之一下存在很长时间。 继续:在这种状态下,Activity处于前台,且用户可以与其交互(又称为运行态,在调用 onResume() 方法调用后)。 暂停:在这种状态下,Activity被在前台中处于半透明状态或者未覆盖整个屏幕的另一个Activity—部分阻挡