Activity七大生命周期详解
2016-06-11 14:59
337 查看
首先,流程图来一张:
介绍生命周期之前,先提一下任务的概念:
任务其实就是activity 的栈,换句话说任务就是” 应用程序” 。
栈底的是启动整个任务的Activity,栈顶的是当前运行的用户可以交互的Activity,当一个activity 启动另外一个的时候,新的activity 就被压入栈,并成为当前运行的activity。而前一个activity 仍保持在栈之中。当用户按下BACK 键的时候,当前activity 出栈,而前一个恢复为当前运行的activity。栈中保存的其实是对象,栈中的Activity 永远不会重排,只会压入或弹出,所以如果发生了诸如需要多个地图浏览器的情况,就会使得一个任务中出现多个同一Activity 子类的实例同时存在。
Activity栈:先进后出规则
为什么需要生命周期?
Android系统是一个多任务(Multi-Task)的操作系统,可以在用手机听音乐的同时,也执行其他多个程序。每多执行一个应用程序,就会多耗费一些系统内存,当同时执行的程序过多,或是关闭的程序没有正确释放掉内存,系统就会觉得越来越慢,甚至不稳定。
为了解决这个问题, Android 引入了一个新的机制– 生命周期(Life Cycle)。
Android 应用程序的生命周期是由Android 框架进行管理,而不是由应用程序直接控制。
Activity整个生命周期的4种状态、7个重要方法
四种状态
1.活动(Active/Running)状态
当Activity运行在屏幕前台(处于当前任务活动栈的最上面),此时它获取了焦点能响应用户的操作,属于运行状态,同一个时刻只会有一个Activity 处于活动(Active)或运行状态
2. 暂停(Paused)状态
当Activity失去焦点但仍对用户可见(如在它之上有另一个透明的Activity或Toast、AlertDialog等弹出窗口时)它处于暂停状态。暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接),但是当系统内存极小时可以被系统杀掉
3. 停止(Stopped)状态
完全被另一个Activity遮挡时处于停止状态,它仍然保留着所有的状态和成员信息。只是对用户不可见,当其他地方需要内存时它往往被系统杀掉
4. 非活动(Dead)状态
Activity 尚未被启动、已经被手动终止,或已经被系统回收时处于非活动的状态,要手动终止Activity,可以在程序中调用”finish”方法。
七个重要方法:
onCreate() 第一次创建时执行:做界面初始化的工作:控件的实例化,监听器的设置(恢复现场)
onStart() 显示窗口时执行,创建视图—–可见不可交互
onResume() 可获取用户焦点时执行—–可见可交互
onPause() 失去用户焦点时执行–可见不可交互(跳转,来电,退出)
OnStop() 窗体不显示——-不可见不可交互
onDestroy() 销毁时执行onStop() 关闭窗口时执行
onRestart() 重新显示窗口时执行
各种情况下生命周期的回调规律
1.打开主界面,后退键退出——->全生命周期
打开主界面,切换横屏竖屏。
Onpause–onstop–ondestroy oncreate–onstart–onresume
打开主界面,点击该界面中捆绑退出事件的按钮后退出
全生命周期历程
打开主界面,按钮进入第二个页面,再从第二个页面返回—–》
Oncreate-onstart-onresum onpause—onstop onrestart—onstart—onresum
5.打开主界面, 电话进入及挂机,再次显示主界面
Oncreate-onstart-onresum
来电:
Onpause—onstop
挂机:
Onrestart—onstart–onresume
6.打开主界面,HOME键退出,再次启动app
HOME键:
Onpause—onstop
再次启动app
Onrestart—onstart–onresume
生命周期的作用:
①当用户接一个电话或切换到另一个程序不会崩溃
②当用户后台运行程序时不会销毁有价值的系统资源
③当用户离开再返回你的应用时不会丢失用户的进程
④当手机屏幕进行横竖屏切换的时候不会崩溃或者丢掉用户的进程
拓展:
protected void onCreate(Bundle savedInstanceState)
括号的参数的意思就是:现场保护时存入的数据,也就是说突然来电话了,程序中断,数据不会丢失,数据会回调保存。
Android保护现场的方法:onSavedInstanceState
恢复现场的方法:onRestorInstanceState onCreate
介绍生命周期之前,先提一下任务的概念:
任务其实就是activity 的栈,换句话说任务就是” 应用程序” 。
栈底的是启动整个任务的Activity,栈顶的是当前运行的用户可以交互的Activity,当一个activity 启动另外一个的时候,新的activity 就被压入栈,并成为当前运行的activity。而前一个activity 仍保持在栈之中。当用户按下BACK 键的时候,当前activity 出栈,而前一个恢复为当前运行的activity。栈中保存的其实是对象,栈中的Activity 永远不会重排,只会压入或弹出,所以如果发生了诸如需要多个地图浏览器的情况,就会使得一个任务中出现多个同一Activity 子类的实例同时存在。
Activity栈:先进后出规则
为什么需要生命周期?
Android系统是一个多任务(Multi-Task)的操作系统,可以在用手机听音乐的同时,也执行其他多个程序。每多执行一个应用程序,就会多耗费一些系统内存,当同时执行的程序过多,或是关闭的程序没有正确释放掉内存,系统就会觉得越来越慢,甚至不稳定。
为了解决这个问题, Android 引入了一个新的机制– 生命周期(Life Cycle)。
Android 应用程序的生命周期是由Android 框架进行管理,而不是由应用程序直接控制。
Activity整个生命周期的4种状态、7个重要方法
四种状态
1.活动(Active/Running)状态
当Activity运行在屏幕前台(处于当前任务活动栈的最上面),此时它获取了焦点能响应用户的操作,属于运行状态,同一个时刻只会有一个Activity 处于活动(Active)或运行状态
2. 暂停(Paused)状态
当Activity失去焦点但仍对用户可见(如在它之上有另一个透明的Activity或Toast、AlertDialog等弹出窗口时)它处于暂停状态。暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接),但是当系统内存极小时可以被系统杀掉
3. 停止(Stopped)状态
完全被另一个Activity遮挡时处于停止状态,它仍然保留着所有的状态和成员信息。只是对用户不可见,当其他地方需要内存时它往往被系统杀掉
4. 非活动(Dead)状态
Activity 尚未被启动、已经被手动终止,或已经被系统回收时处于非活动的状态,要手动终止Activity,可以在程序中调用”finish”方法。
七个重要方法:
onCreate() 第一次创建时执行:做界面初始化的工作:控件的实例化,监听器的设置(恢复现场)
onStart() 显示窗口时执行,创建视图—–可见不可交互
onResume() 可获取用户焦点时执行—–可见可交互
onPause() 失去用户焦点时执行–可见不可交互(跳转,来电,退出)
OnStop() 窗体不显示——-不可见不可交互
onDestroy() 销毁时执行onStop() 关闭窗口时执行
onRestart() 重新显示窗口时执行
各种情况下生命周期的回调规律
1.打开主界面,后退键退出——->全生命周期
打开主界面,切换横屏竖屏。
Onpause–onstop–ondestroy oncreate–onstart–onresume
打开主界面,点击该界面中捆绑退出事件的按钮后退出
全生命周期历程
打开主界面,按钮进入第二个页面,再从第二个页面返回—–》
Oncreate-onstart-onresum onpause—onstop onrestart—onstart—onresum
5.打开主界面, 电话进入及挂机,再次显示主界面
Oncreate-onstart-onresum
来电:
Onpause—onstop
挂机:
Onrestart—onstart–onresume
6.打开主界面,HOME键退出,再次启动app
HOME键:
Onpause—onstop
再次启动app
Onrestart—onstart–onresume
生命周期的作用:
①当用户接一个电话或切换到另一个程序不会崩溃
②当用户后台运行程序时不会销毁有价值的系统资源
③当用户离开再返回你的应用时不会丢失用户的进程
④当手机屏幕进行横竖屏切换的时候不会崩溃或者丢掉用户的进程
拓展:
protected void onCreate(Bundle savedInstanceState)
括号的参数的意思就是:现场保护时存入的数据,也就是说突然来电话了,程序中断,数据不会丢失,数据会回调保存。
Android保护现场的方法:onSavedInstanceState
恢复现场的方法:onRestorInstanceState onCreate
相关文章推荐
- 安卓应用双启动工具 双开助手v2.0.10
- Java线程池使用说明
- statusbar 纯白色的解决方案 android:fitsSystemWindows
- Android 新闻App的开发思路
- Linux基础命令-echo、ls
- Sort---排序
- 深入浅出VMware的组网模式
- JavaScript 通过native.js 调用Android原生API
- C++学习笔记 指针与引用的区别
- OpenJudge 2253:Frogger
- python序列化模块json和pickle
- leetcode 119 Pascal's Triangle II
- git基础使用
- 标准采购订单的计算方案确定
- iOS开发多线程篇—多线程简单介绍
- ASP.NET 搭建贴吧机器人(零)
- JS定时器使用,定时定点,固定时刻,循环执行详解
- 4年程序员
- 第16天内容
- XILINX的FPGA的资源