一个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
相关推荐
日志追踪(完成以下六步、明白android的四种状态的生命周期和相互切换): 1、启动app、查看控制台输出,发现依次触发onCreate、onStart、onResume这三个方法 2、点击按钮(弹窗风格的Activity),控制台输出onPause...
对于应用开发者来说,理解不同的应用组件(特别是Activity、Service、Intent Receiver)对应用进程的生命周期的影响,这是非常重要的。如果没有正确地使用这些组件,将会导致当应用正在处理重要的工作时,进程却被...
中,Activity具有自己的生命周期(由系统控制生命周期,程序无法改变,但可 以用onSaveInstanceState保存其状态)。 对于Activity,关键是其生命周期的把握(如那张经典的生命周期图=.=),其 次就是状态的保存和恢复...
两分钟彻底让你明白Android Activity生命周期(图文)
借用借助 Android 日志来观测activity 生命周期中的每种状态回调方法的生命周期,具体详情 看 https://blog.csdn.net/jaz/article/details/119580819
五、管理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...
Activity生命周期一般分为四个基本状态,分别是活动状态(running),暂停状态(paused),停止状态(stopped)和死亡状态。 1.活动状态(running) 活动状态一般是指该Activity正处于屏幕最显著的位置上显示,即该Activity...
Android基础-2(Activity),介绍了Android的创建,注册,启动,关闭,和生命周期,以及什么时候保存Activity的状态
实验一Android环境构建与Activity生命周期 【目的】 安装智能手机开发相关软件平台,并在此基础上测试Activity的生命周期过程。 【要求】 1. 完成智能手机开发平台安装、以及相关配置; 2. 并实现Hello World; 3. ...
本PDF主要是介绍Activity生命周期,目的是为了更的多的android朋友初学者或者不太深入理解的朋友更加地深入android开发程序中去,并全面介绍Activity生命周期中的细节,理解Activity的生命周期对应用程序开发来说是...
Activity 的生命周期 以及 横屏竖屏切换时 Activity 的状态变化 例如: 切换到横屏 onSaveInstanceState onPause onStop onDestroy onCreate onStart onRestoreInstanceState onResume
了解Android系统的进程优先级的变化方式 了解Android系统的四大基本组件 ... 了解Activity的生命周期中各状态的变化关系 掌握Activity事件回调函数的作用和调用顺序 掌握Android应用程序的调试方法和工具
本文实例讲述了Android编程之基于Log演示一个activity生命周期。分享给大家供大家参考,具体如下: 利用Android的Log 演示一个activity的生命周期 代码: //DemoActivity.java package uni.activity; /* @author ...
Acitvity 生命周期代码示例,详细描述activity三种状态变化
上图是Android Activity的生命周期图,其中Resumed、Paused、Stopped状态是静态的,这三个状态下的Activity存在时间较长。 (1)Resumed:在此状态时,用户可以与Activity进行交互,Activity在最前端 (2)Paused:...
Android生命周期 Activity整个生命周期,logcat 过滤信息查看生命周期状态变化
Android消息总线,基于LiveData,具有生命周期感知能力,支持Sticky 简单之美 LiveEventBus实现非常简单,功能却非常强大。简单好用,就是最好的:) LiveEventBus的特点 [x] 生命周期感知,消息随时订阅,自动...
Activity生命周期3. 创建Activity4. 配置Activity5. 启动和关闭Activity6. Activity 传递数据7. Activity 返回数据8. 题目记录关于生命周期详见前面 2.Activity生命周期 1. 学习指导 本讲主要介绍了Android四大组件...
Android Activity的生命周期详细介绍 生命周期描述的是一个类从创建(new出来)到死亡(垃圾回收)的过程中会执行的方法。在这个过程中,会针对不同的生命阶段调用不同的的方法。 Activity是Android中四大组件之...