`

Android---Activity生命周期状态

 
阅读更多

Android---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()为止。activity onCreate()中设置所有 全局 状态以完成初始化,而在 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.调用当前activity onPause()方法。

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

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


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

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

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

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

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


还有就是当切换横竖屏幕时也会发生生命周期事件:


ActivityLifecycle.rar

分享到:
评论

相关推荐

    Activity生命周期演示

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

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

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

    Android-教程精华-开发

    中,Activity具有自己的生命周期(由系统控制生命周期,程序无法改变,但可 以用onSaveInstanceState保存其状态)。 对于Activity,关键是其生命周期的把握(如那张经典的生命周期图=.=),其 次就是状态的保存和恢复...

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

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

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

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

    Android学习笔记-Activity篇

    五、管理Activity的生命周期 2 5.1 生命周期简介 2 5.2 保存activity状态 3 5.3 处理配置文件的改变 3 5.4 Activity之间的合作 3 Tasks and Back Stack 4 一、管理Task 4 1.1 定义launch模式 4 1.2 设置affinities 5...

    Android中的Activity生命周期总结

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

    Android基础-2(Activity)

    Android基础-2(Activity),介绍了Android的创建,注册,启动,关闭,和生命周期,以及什么时候保存Activity的状态

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

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

    深入Activity的生命周期

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

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

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

    四、Android程序生命周期-Android开发与实践

    了解Android系统的进程优先级的变化方式 了解Android系统的四大基本组件 ... 了解Activity的生命周期中各状态的变化关系 掌握Activity事件回调函数的作用和调用顺序 掌握Android应用程序的调试方法和工具

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

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

    android生命周期

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

    Android中Activity的生命周期探讨

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

    Android生命周期

    Android生命周期 Activity整个生命周期,logcat 过滤信息查看生命周期状态变化

    Android代码-LiveEventBus

    Android消息总线,基于LiveData,具有生命周期感知能力,支持Sticky 简单之美 LiveEventBus实现非常简单,功能却非常强大。简单好用,就是最好的:) LiveEventBus的特点 [x] 生命周期感知,消息随时订阅,自动...

    【android编程】第七讲-android Activity

    Activity生命周期3. 创建Activity4. 配置Activity5. 启动和关闭Activity6. Activity 传递数据7. Activity 返回数据8. 题目记录关于生命周期详见前面 2.Activity生命周期 1. 学习指导 本讲主要介绍了Android四大组件...

    Android Activity的生命周期详细介绍

    Android Activity的生命周期详细介绍 生命周期描述的是一个类从创建(new出来)到死亡(垃圾回收)的过程中会执行的方法。在这个过程中,会针对不同的生命阶段调用不同的的方法。  Activity是Android中四大组件之...

Global site tag (gtag.js) - Google Analytics