Activity生命周期
来源:互联网 发布:域名城论坛 编辑:程序博客网 时间:2024/06/05 03:58
1.Activity生命周期
Activity派生图:
java.lang.Object
—android.content.Context
—–android.content.ContextWrapper
——–android.view.ContextThemeWrapper
————android.app.Activity
2.Activity状态描述:
一个Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例如拨号、拍照、发送邮件等。
一个应用程序通常由多个activities组成,他们通常是松耦合关系。通常,一个应用程序中的activity被指定为”main”activity,当第一次启动应用程序的时候呈现给用户的那个activity。每一个activity然后可以启动另一个activity为了完成不同的动作。每一次一个activity启动,前一个activity就停止了,但是系统保留activity在一个栈上(“back stack”)。当一个新activity启动,它被推送到栈顶,取得用户焦点。Back Stack符合简单“后进先出”原则,所以,当用户完成当前activity然后点击back按钮,它被弹出栈(并且被摧毁),然后之前的activity恢复。
1.在屏幕的前台(Activity栈顶),叫做活动状态或者运行状态(active or running)
2.如果一个Activity失去焦点,但是依然可见(一个新的非全屏的Activity 或者一个透明的Activity 被放置在栈顶),叫做暂停状态(Paused)。一个暂停状态的Activity依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被杀掉。
3.如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped)。它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,Stopped的Activity将被杀掉。
4.如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从内存中删除,Android系统采用两种方式进行删除,要么要求该Activity结束,要么直接杀掉它的进程。当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。
当Activity启动时:onCreate —> onStart —> onResume
若在Activity_a启动了Activity _b : a _onCreate —>a _onStart —> a _onResume—–>a _onPause—>b _onCreate —>b _onStart —> b _onResume—->a _onStop
若再返回a: —>b _onPause—->a _onRestart—->a _onStart —> a _onResume—>b _onstop—>b _onDestroy
何时onPause, 何时onStop,何时onDestory; 以及恢复的时候,何时onRestart,何时onResume。
为了方便说明这里把当前activity称为MainActivity,其他的activity称为SecondActivity、ThirdActivity等等。
通过上图的我们可以看出activity从running状态跳转到onPause状态的原因是:Another activity comes into the foreground. 也就是说有另外一个actvity被启动并运行了,比如说MainActivity通过startActivity启动了SecondActivity,那么SecondActivity就在ui视图的最顶层了,而MainActivity不再是最顶层的activity了,此时就会onPause了,此时我们依稀还能看到MainActivity,只是MainActivity已经站在他人之后了。
而当MainActivity完全被SecondActivity挡住,完全看不见的时候,此时MainActivity就会onStop了。我们看看上图从onPause到onStop的原语是:the activity is no longer visiable.也就是说此时MainActivity完全不可见了,处于onStop状态
从actvitiy的生命周期图中,我们可以看出activity是可以停留在onPause和onStop在这两个状态上的,因为可以相应的恢复。
那么何时停留在onPause,何时停留在onStop呢?
下图的MainActivity就是处于onPause状态:
因为这里的second actvity是dialog样式:
也就验证了当MainActivity不再在最顶端,但仍然可见的时候,MainActivity就处于onPause状态,此时如果退出(back键)second activity,那么MainActivity就会onResume。
下图的MainActivity就是处于onStop状态(注意,这里的third activity 是在 MainActivity中通过startActivity启动的):
因为此时MainActivity已经完完全全被Thrid actvity挡住了,完全不可见了,所以MainActivity处于onStop状态,如果此时退出Thrid activity(back键),那么MainActivity就会onRestart().
何时onDestory呢?
当在MainActivity中按back键,退出时,最终就会走到onDestory,或者在代码中调用finish()的时候也会走到onDestroy这一步。
当MainActivity处于onPause和onStop状态时,当更高优先级的apps需要内存,而此时系统内存不够了,那么android系统就会将MainActivity所在的进程给杀了以释放资源。
当然被杀了之后,想重生,那必须得从头来过: onCreate —> onStart() —> onResume().
注意:添加新的Activity时需要在AndroidManifest.xml中说明
- Activity 生命周期
- Activity生命周期
- Activity 生命周期
- Activity 生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- activity生命周期
- Activity 生命周期
- Activity生命周期
- Activity 生命周期
- activity生命周期
- Activity 生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- 网页嵌入flash代码
- 第三周项目三程序的多文件组织
- 北京 买房 提取 公积金
- Android开发_SQLite数据库
- 数据库事务深入学习
- Activity生命周期
- Oracle - 数据库的实例、表空间、用户、表之间关系
- C语言字符串操作函数
- 在淘宝买到了假货究竟是谁的责任
- linux 的文件权限
- Redis实践一安装
- POI读取xls和xlsx
- java 防止 XSS 攻击的常用方法总结
- XListView使用指南