Activity生命周期和启动模式

来源:互联网 发布:数字小姐是谁 知乎 编辑:程序博客网 时间:2024/05/22 00:26

一、Activity的生命周期

1、生命周期

1)onCreate:表示Activity正在被创建,一般用来初始化布局资源和一些初始数据。2)onRestart:表示Activity正在重新启动,当前Activity从不可见状态变为可见状态。3)onStart:表示Activity正在启动,当前Activity为可见状态,但是对于前台不可见,不可进行交互。4)onResume:表示Activity为可见状态,也可以和用户进行交互。5)onPause:表示Activity正在停止,即将调用onStop方法。6)onStop:表示Activity即将停止,可以进行一些轻量级的回收工作,如果再次返回原Activity,会调用onRestart方法。7)onDestory:表示Activity即将销毁,可以进行一些重量级的回收工作和资源释放。

这里写图片描述

2、正常情况下的生命周期

1)启动当前Activity:onCreate->onStart->onResume.2)启动新的Activity:旧的onPause,然后新的onCreate->onStart->onResume.3)最后旧的Activity:onStop->onDestory.

3、异常情况下的生命周期

1)出现异常,调用onSaveInstanceState进行信息保存。2)恢复Activity,调用onRestoreInstanceState进行数据的加载。

解决方法:通过在Manifest.xml中,为Activity的configChanges属性设置locale、orientation、keyboardHidden等,保证在系统配置发生改变时,当前Activity不会重新创建。

注意:一般不在onCreate中对数据进行恢复,因为需要对saveInstanceState进行判空操作,而会在onRestoreInstanceState进行数据恢复,因为其中的saveInstanceState一定不为null.

二、Activity的启动模式

1、4种启动模式

1)standard:标准模式,Activity默认模式,每次启动这个Activity,都会创建一个新的实例。2)singleTop:栈顶复用模式,如果当前栈顶有它的实例直接调用,然后调用它的onNewIntent方法,否则创建一个新的实例。3)singleTask:栈内复用模式,如果某个栈中有它的实例,则让它上面的实例全部出栈,调用它,再调用它的onNewIntent方法,否则创建一个新的实例。4)singleInstance:单实例模式,在这个Activity启动后,系统为它创建一个单独的栈,然后把它压到里面,除非这个栈被销毁,否则不会再创建这个Activity的实例。

2、例子

现有两个栈,前台栈压入A,后台栈依次压入B,C(B、C均为singleTask模式),操作为进入B,按back,再按back1)进入B:先把整个后台栈压入前台栈,因为B是singleTask模式,所以C出栈,调用B。2)按back:B出栈,调用A。3)再按back:A出栈,回到桌面。

3、Activity的Flags

1)FLAG_ACTIVITY_NEW_TASK:对应singleTask模式。2)FLAG_ACTIVITY_SINGLE_TOP:对应singleTop模式。3)FLAG_ACTIVITY_CLEAR_TOP:如果Activity模式为singleTask,则让它之上的实例全部出栈,调用它;如果Activity模式为singleTop,则让它和它之上的实例全部出栈,创建一个它的新实例。4)FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:这个Activity不会出现在历史Activity的列表中。
0 0
原创粉丝点击