Activity生命周期
来源:互联网 发布:ni软件什么用 编辑:程序博客网 时间:2024/06/16 18:42
其实这篇我是想转一发来着的,但是看了半天没看到什么满意的,好不容易看到一篇还不允许转载………….
那么还是自己来吧,以下是我的一些对官方文档的理解和对自己所看书籍知识的回忆
首先要知道的是,Android使用Task来管理活动,一个Task就是一组存放在栈里的活动的集合,这个栈被称作返回栈(Back Stack)。
从数据结构的知识我们可以知道,栈是一种后进先出的数据结构,在默认情况(Activity有四种启动模式,请详情点击)下,当我们启动一个新的Activity,它会在返回栈中入栈并处于栈顶的位置。当我们按下Back键或者调用finish()方法去销毁一个活动时,处于栈顶的活动会出栈,那么前一个入栈的活动就会重新处于栈顶的位置。系统总是会显示处于栈顶的活动给用户。
下面上图:
这是一幅Activity生命周期流程图,这些矩形方框里是一些回调方法,当Activity在两个状态切换时,我们可以重写这些回调方法来执行我们想要的操作。
活动状态
Activity在生命周期里最多有四种状态
1.运行状态:当活动位于栈顶时,活动就处于运行状态。2.暂停状态:当活动失去了焦点但仍然可见时就进入了暂停状态,此时该活动已经不在栈顶。(举个栗子,一个对话框位于栈顶,但它并不会占满整个屏幕,此时后面的那个Activity就位于暂停状态)。处于暂停状态的活动时完全存活的,除非在内存极低的情况下,系统才会去考虑回收这种活动。
3.停止状态:当活动被其他活动完全遮盖不再处于栈顶位置的时候,就进入了停止状态。系统仍然会为这种活动保存相应的状态和成员变量,但这并不完全可靠,当其他地方需要内存的时候,处于停止状态的活动有可能会被系统回收。
4.销毁状态:当一个活动从返回栈中移除后就变成了销毁状态。当我们想要再将这个Activity展现给用户的时候,必须要完全重新开始和修复到之前的状态。系统最倾向于回收处于这种状态的Activity,从而保证手机的内存充足。
回调方法
1.onCreate():所有的Activity都会实现这个方法。它会在Activity第一次被创建的时调用。我们应该在这个方法中完成活动的初始化操作,比如加载布局,绑定事件等等。
2.onStart():当Activity由不可见变为可见时调用该方法。接着它后面的是onResume()或onStop()。
3.onResume():当activity开始要和用户进行交互的时候调用该方法。这个时候Activity一定位于栈顶的位置,并且处于运行状态。
4.onPause():当系统准备去启动或者恢复另一个Activity时调用。我们通常会在该方法中保存一些没有保存的关键数据,释放动画或其他消耗CPU的资源。这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。
5.onStop():当Activity完全不可见时调用该方法。注意是完全不可见,比如新活动是一个对话框的时候,执行的就应该是onPause()而不是onStop()。
6.onDestroy():这个方法在Activity被销毁之前调用,这之后activity就将处于销毁状态。
7.onRestart():这个方法在Activity重新启动时调用,就是已经停止了,又要转向运行状态的时候调用。由图也可知这个方法后面后面总是onStart()。
活动生存期
由上面的回调方法又可以将Activity分为三种生存期。1.完整生存期(Entire lifetime)——Activity在onCreate()方法和onDestroy()方法之间所经历的就是完整生存期。Activity会在onCreate()方法中完成各种初始化操作,在onDestroy()方法中完成释放内存的操作。
2.可见生存期(Visible lifetime)——Activity在onStart()方法和onStop()方法之间所经历的,就是可见生存期。在这段生存期内,Activity对于用户一直可见,即便可能有些无法与用户进行交互。我们可以使用这两个方法,管理那些对用户可见的资源。比如在onStart()方法中对资源进行加载,而在onStop()方法中对资源进行释放,从而保证处于停止状态的Activity不会占用太多内存。
3.前台生存期(Foreground lifetime)——Activity在onResume()方法和onPause()方法之间所经历的,就是前台生存期。在前台生存期内,Activity总是处于运行状态的,此时的Activity是可以与用户进行交互的,我们平时看到和接触最多的就是这个状态下的Activity。
注:知识点参考自Android官方文档及《第一行代码》/郭霖
- Activity 生命周期
- Activity生命周期
- Activity 生命周期
- Activity 生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- activity生命周期
- Activity 生命周期
- Activity生命周期
- Activity 生命周期
- activity生命周期
- Activity 生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- dockerfile 多端口映射 expose
- SQLite C/C++ 编译
- Android应用开发学习—Toast使用方法大全
- <s:checkbox> fieldValue取值问题
- Maven 配置中国的 Maven 库 osChina Maven库
- Activity生命周期
- Jcrop使用心得
- Introduction to Java Programming编程题8.37<Guess the capitals>
- 断开window共享连接记录密码
- .Net——Nhibernate实现CRUD
- 人机比大小
- (乙)1014. 福尔摩斯的约会
- 获取项目的目录
- java拾遗------面向对象知识