Activity的生命周期和启动模式

来源:互联网 发布:linux培训机构排名 编辑:程序博客网 时间:2024/06/07 18:43

1.1.1 典型情况的生命周期

onCreate:表示Activity正在被创建,在这个方法中可以做一些初始化工作,比如调用setContentView去加载界面布局资源、初始化Activity所需数据等。onRestart:表示Activity正在重新启动。当当前Activity从不可见到可见时调用。onStart:表示Activity正在被启动,即将开始,此时Activity可见但未出现在前台,无法和用户交互。onReSume:表示Activity可见了,并且出现在在前台并开始活动,和onStart相比,onStart的时候Activity还在后台,而onResume的时候Activity已经在前台。onPause:表示Activity正在停止,正常情况,onStop会紧接着被调用。此时可以做一些储存数据、停止动画等工作,但不可以太耗时。onStop:表示Activity即将停止,可以做一些稍微重量级的回收工作。onDestroy:表示Activity即将被销毁,这里做回收工作和最终的资源释放。

生命周期

小tips:当ActivityA切换到ActivityB时会先执行A的onPause方法。具体是:A的onPause->B的onCreate->B的onStart->B的onResume->A的onStop。因此onPause中不能执行耗时操作,从而使新Activity尽快显示。

1.1.2 异常生命周期

## 情况1: 资源相关的系统配置发生改变导致Activity被杀死并重建##    比较典型的就是当前Activity处于竖屏状态,旋转屏幕,由于系统配置发生了改变,Activity会销毁并重建。    Activity->发生意外->onSaveInstanceState->重新创建->onCreate->onRestoreInstanceState## 情况2:资源内存不足导致低优先级的Activity被杀死 ##    Activity的优先级:    ·前台Activity——正在与用户交互的Activity,优先级最高。    ·可见但非前台Activity——比如弹出了对话框使得Activity无法和用户交互。    ·后台Activity——已经暂停的Activity。    当系统内存不足时,系统就会按照优先级杀死目标Activity的进程,并在后续通过onSaveInstanceState和onRestoreInstanceState来储存和回复数据。    当系统配置发生变化又不想Activity被重建,就会用到configChanges属性。当然系统配置中所含的项目非常多。    ·mcc:SIM卡唯一标识IMSI中的国家代码。    ·mnc:SIM卡唯一标识IMSI中的运营商代码。    ·locale:设备的本地位置发生改变,一般为语言切换。    ·touchscreen:触摸屏发生改变。    ·keyboard:键盘类型发生改变,比如外插键盘。    ·keyboardHidden:键盘的可访问性发生改变,比如用户调出了键盘。    ·navigation:系统导航方式发生改变。    ·screenLayout:屏幕布局发生改变,很可能激活了另外一个显示设备。    ·fontScale:系统字体缩放比例变化,比如选了一个新的字号。    ·uiMode:用户界面模式发生变化,比如开启了夜间模式。    ·orientation:屏幕方向发生改变,比如旋转了屏幕。    ·screenSize:屏幕的尺寸信息改变,当旋转屏幕,尺寸会变化。    ·smallestScreenSize:设备的物理屏幕发生变化,比如用户切换到了外部的显示设备。    ·layoutDirection:布局方向发生变化。

1.2.1 Activity的launchMode

当我们多次启动同一个Activity的时候,系统会创建多个实例并把他们一一放进任务栈中。任务栈时一种“后进先出”的栈结构。但这样太过愚蠢所以提供了四种启动模式来解决这个问题。分别是:standard、singleTop、singleTask和singleInstance。·standard:标准模式,也就是默认模式。每次启动一个Activity都会新建一个实例,在这种模式下,谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的任务栈中。比如A启动了B,那么B就在A的任务栈中。·singleTop:栈顶复用模式。这种模式下,如果新Activity已经位于任务栈顶端,那么此Activity不会被重建,系统会回调onNewIntent方法,通过此方法的参数我们可以取出当前请求的信息。这个Activity的onCreate、onStart不会被调用。·singleTask:栈内复用模式。单例模式,这种模式下,只要Activity在栈中存在就不会重新创建实例,系统会调用onNewIntent方法,并把它调到栈顶,由于singleTask具有clearTop效果,会导致所有在此Activity上面的Activity全部出栈。·singleInstance:单实例模式,加强的singleTask模式,具有所有singleTask特性,除此之外,此模式的Activity只能独立地位于一任务栈中。小tips:可以通过AndroidMenifest指定启动模式并可以指定taskAffinity(可以理解为栈的名称默认为包名),或者通过Intent中设置标志位来指定。

1.3 IntentFilter

启动Activity分为显式调用和隐式调用。
原创粉丝点击