`
yuanlanjun
  • 浏览: 1177048 次
文章分类
社区版块
存档分类
最新评论

Activity生命周期状态

 
阅读更多

Activity生命周期:

    一个activity主要有三个状态:

·当在屏幕前台时(位于当前任务堆栈的顶部),它是活跃或运行的状态。它就是相应用户操作的activity

·当它失去焦点但仍然对用户可见时,它处于暂停状态。即是:在它之上有另外一个activity。这个activity也许是透明的,或者未能完全遮蔽全屏,所以被暂停的activity仍对用户可见。暂停的activity仍然是存活状态(它保留着所有的状态和成员信息并连接至窗口管理器),但当系统处于极低内存的情况下,仍然可以杀死这 个activity

·如果它完全被另一个activity覆盖是,它处于停止状态。它仍然保留所有的状态和成员信息。然而它不在为用户可见,所以它的窗口将被隐藏,如果其它地方需要内存,则系统经常会杀死这个activity

如果一个activity处于暂停或停止状态,系统可以通过要求它结束(调用它的finish()方法)或直接杀死它的进程来将它驱出内存。当它再次为用户可见的时候,它只能完全重新启动并恢复至以前的状态。

当一个activity从这个状态转变到另一个状态时,它被以下列protected方法所通知:

voidonCreate(BundlesavedInstanceState)

voidonStart()
voidonRestart()
voidonResume()
voidonPause()
voidonStop()
voidonDestroy()

你可以重载所有这些方法以在状态改变时进行合适的工作。所有的activity都必须实现 onCreate()用以当对象第一次实例化时进行初始化设置。很多情况下我在activity会中实现onPause()以提交数据变化或准备停止与用户的交互。

调用父类

所有activity生命周期方法的实现都必须先调用其父类的版本。比如说:

protectedvoidonPause(){
super.onPause();
...
}

总得来说,这七个方法定义了一个activity完整的生命周期。实现这些方法可以帮助你监察三个嵌套的生命周期循环:

·一个activity完整的生命周期自第一次调用onCreate()开始,直至调用onDestroy()为止。activityonCreate()中设置所有全局状态以完成初始化,而在onDestroy()中释放所有系统资源。比如说,如果activity有一个线程在后台运行以从网络上下载数据,它会以onCreate()创建那个线程,而以onDestroy()销毁那个线程。

·一个activity可视生命周期自onStart()调用开始直到相应的onStop()调用。在此期间,用户可以在屏幕上看到此activity尽管它也许并不是位于前台或者正在与用户做交互。在这两个方法中,你可以管控用来向用户显示这个activity的资源。比如说,你可以在onStart()中注册一个BroadcastReceiver来监控会影响到你UI的改变,而在onStop()中来取消注册,这时用户是无法看到你的程序显示的内容的。onStart()和onStop()方法可以随着应用程序是否为用户可见而被多次调用。

·一个activity前台生命周期自onResume()调用起,至相应的onPause()调用为止。在此期间,activity位于前台最上面并与用户进行交互activity会经常在暂停和恢复之间进行状态转换──比如说当设备转入休眠状态或有新的activity启动时,将调用onPause()方法。当activity获得结果或者接收到新的intent的时候会调用onResume()方法。因此,在这两个方法中的代码应当是轻量级的。

下图展示了上述循环过程以及activity在这个过程之中历经的状态改变。着色的椭圆是activity可以经历的主要状态。矩形框代表了当activity在状态间发生改变的时候,你进行操作所要实现的回调方法。

下表详细描述了这些方法,并在activity的整个生命周期中定位了它们。

方法

描述

可被杀死

下一个

onCreate()

activity第一次被创建的时候调用。这里是你做所有初始化设置的地方──创建视图、绑定数据至列表等。如果曾经有状态记录(参阅后述SavingActivityState。),则调用此方法时会传入一个包含着此activity以前状态的包对象做为参数。

总继之以onStart()。

onStart()

onRestart()

activity停止后,在再次启动之前被调用。

总继之以onStart()。

onStart()

onStart()

activity正要变得为用户所见时被调用。

activity转向前台时继以onResume(),在activity变为隐藏时继以onStop()。

onResume()
or
onStop()

onResume()

activity开始与用户进行交互之前被调用。此时activity位于堆栈顶部,并接受用户输入。

继之以onPause()。

onPause()

onPause()

当系统将要启动另一个activity时调用。此方法主要用来将未保存的变化进行持久化,停止类似动画这样耗费CPU的动作等。这一切动作应该在短时间内完成,因为下一个activity必须等到此方法返回后才会继续。

activity重新回到前台是继以onResume()。当activity变为用户不可见时继以onStop()。

onResume()
or
onStop()

onStop()

activity不再为用户可见时调用此方法。这可能发生在它被销毁或者另一个activity(可能是现存的或者是新的)回到运行状态并覆盖了它。

如果activity再次回到前台跟用户交互则继以onRestart(),如果关闭activity则继以onDestroy()。

onRestart()
or
onDestroy()

onDestroy()

activity销毁前调用。这是activity接收的最后一个调用。这可能发生在activity结束(调用了它的finish()方法)或者因为系统需要空间所以临时的销毁了此acitivity的实例时。你可以用isFinishing()方法来区分这两种情况。

nothing

请注意上表中可被杀死一列。它标示了在方法返回后,还没执行activity的其余代码的任意时间里,系统是否可以杀死包含此activity的进程。三个方法(onPause()、onStop()onDestroy())被标记为onPause()是三个中的第一个,它也是唯一一个在进程被杀死之前必然会调用的方法──onStop()和onDestroy()有可能不被执行。因此你应该用onPause()来将所有持久性数据(比如用户的编辑结果)写入存储之中。

在可被杀死一列中标记为的方法在它们被调用时将保护activity所在的进程不会被杀死。所以只有在onPause()方法返回后到onResume()方法被调用时,一个activity才处于可被杀死的状态。在onPause()再次被调用并返回之前,它不会被系统杀死。

如后面一节进程和生命周期所述,即使是在这里技术上没有被定义为可杀死activity仍然有可能被系统杀死──但这仅会发生在实在没有其它方法的极端情况之下。

保存activity状态

当系统而不是用户自己出于回收内存的考虑,关闭了一个activity之后。用户会期望当他再次回到那个activity的时候,它仍保持着上次离开时的样子。

为了获取activity被杀死前的状态,你应该为activity实现onSaveInstanceState()方法。Android会调用此方法activity有可能被销毁之前(即onPause()调用之前)。它会将一个以名称-值对方式记录了activity动态状态的Bundle对象传递给该方法。当activity再次启动时,这个Bundle会传递给onCreate()方法和随着onStart()方法调用的onRestoreInstanceState(),所以它们两个都可以恢复捕获的状态。

与onPause()或先前讨论的其它方法不同,onSaveInstanceState()和onRestoreInstanceState()并不是生命周期方法。它们并不是总会被调用。比如说,Android会在activity易于被系统销毁之前调用onSaveInstanceState(),但用户动作(比如按下了BACK键)造成的销毁则不调用。在这种情况下,用户没打算再次回到这个activity,所以没有保存状态的必要。

因为onSaveInstanceState()不是总被调用,所以你应该只用它来为activity保存一些临时的状态,而不能用来保存持久性数据。而是应该用onPause()来达到这个目的。

协调activity

当一个activity启动了另外一个的时候,它们都会经历生命周期变化。一个会暂停乃至停止,而另一个则启动。这种情况下,你可能需要协调好这些activity

生命周期回调顺序是已经定义好的,尤其是在两个activity在同一个进程内的情况下:

1.调用当前activityonPause()方法。

2.接着,顺序调用新启动activityonCreate()、onStart()和onResume()方法。

3.然后,如果启动的activity不再于屏幕上可见,则调用它的onStop()方法。


总之:1、Activity 从创建到进入运行态所触发的事件 onCreate()-->onStart-->onResume()

2、从运行态到停止态所触发的事件 onPause()--->onStop()

3、从停止态到运行态所触发事件 onRestart()-->onStart()--->onResume()

   4、从运行态到暂停态所触发事件 onPause()

5、从暂停态到运行态所触发事件 onResume()


分享到:
评论

相关推荐

    activity生命周期

    activity生命周期详解,http://blog.csdn.net/huiblog/article/details/53292490

    Activity生命周期演示

    日志追踪(完成以下六步、明白android的四种状态的生命周期和相互切换): 1、启动app、查看控制台输出,发现依次触发onCreate、onStart、onResume这三个方法 2、点击按钮(弹窗风格的Activity),控制台输出onPause...

    Android课程第一次实验报告_Andorid应用程序Activity生命周期.docx

     对于应用开发者来说,理解不同的应用组件(特别是Activity、Service、Intent Receiver)对应用进程的生命周期的影响,这是非常重要的。如果没有正确地使用这些组件,将会导致当应用正在处理重要的工作时,进程却被...

    Android编程之基于Log演示一个activity生命周期实例详解

    本文实例讲述了Android编程之基于Log演示一个activity生命周期。分享给大家供大家参考,具体如下: 利用Android的Log 演示一个activity的生命周期 代码: //DemoActivity.java package uni.activity; /* @author ...

    深入Activity的生命周期

    本PDF主要是介绍Activity生命周期,目的是为了更的多的android朋友初学者或者不太深入理解的朋友更加地深入android开发程序中去,并全面介绍Activity生命周期中的细节,理解Activity的生命周期对应用程序开发来说是...

    Android中的Activity生命周期总结

    Activity生命周期一般分为四个基本状态,分别是活动状态(running),暂停状态(paused),停止状态(stopped)和死亡状态。 1.活动状态(running) 活动状态一般是指该Activity正处于屏幕最显著的位置上显示,即该Activity...

    两分钟彻底让你明白Android Activity生命周期(图文)

    两分钟彻底让你明白Android Activity生命周期(图文)

    安卓activity生命周期分析demo

    安卓activity生命周期的demo,在多个activity之间,跳转到窗口化activity,通过日志打印来分析activity状态变化过程。博客链接 http://blog.csdn.net/haunt_/article/details/43703147

    Activity 的生命周期 以及 横屏竖屏切换时 Activity 的状态变化

    Activity 的生命周期 以及 横屏竖屏切换时 Activity 的状态变化 例如: 切换到横屏 onSaveInstanceState onPause onStop onDestroy onCreate onStart onRestoreInstanceState onResume

    实验一Android环境构建与Activity生命周期.doc

    实验一Android环境构建与Activity生命周期 【目的】 安装智能手机开发相关软件平台,并在此基础上测试Activity的生命周期过程。 【要求】 1. 完成智能手机开发平台安装、以及相关配置; 2. 并实现Hello World; 3. ...

    activity生命周期讲解

    该方法做一些初始化动作,比如创建views,设置数据到list等等,该方法提供了一个Bundle类型的变量,该变量中有这个activity以前的状态信息,前提是以前存过这些信息。这个方法执行完后执行的是onStart()方法;若在...

    Activity 生命周期

    Activity的生命周期是开发者必须熟知的部分,看看在不通状态下,Activity分别走了哪些生命周期。

    android生命周期

    Acitvity 生命周期代码示例,详细描述activity三种状态变化

    fragment生命周期

    Fragment生命周期,Frament生命周期和Activity生命周期的关系。Fragment的生命周期方法何时回调。

    Android中Activity的生命周期探讨

    上图是Android Activity的生命周期图,其中Resumed、Paused、Stopped状态是静态的,这三个状态下的Activity存在时间较长。 (1)Resumed:在此状态时,用户可以与Activity进行交互,Activity在最前端 (2)Paused:...

    Activity生命周期

    关于保存数据的圣经周期函数,Activity的生命周奇在onPasue时候进行保存,不管Activity何种状态 在可以看到的情况下 会执行onResuan这个 生命周奇奇函数

    android-Kotlin源码利用甜点点餐观测Activity函数的生命周期

    借用借助 Android 日志来观测activity 生命周期中的每种状态回调方法的生命周期,具体详情 看 https://blog.csdn.net/jaz/article/details/119580819

    Android中Activity生命周期和启动模式详解

    主要介绍了Activity生命周期和启动模式详解的相关资料,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics