您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: