Activity生命周期与启动模式笔记

来源:互联网 发布:红米note3怎么内存优化 编辑:程序博客网 时间:2024/06/07 10:54

生命周期

这里写图片描述


1、有两个Activity A和B,从A跳转到B,然后在B中按返回键,返回A,两者的生命周期变化如下:
这里写图片描述


2、在Activity A处于running状态时,有电话打入:
这里就需要注意,就存在两种情形,如果来电提醒是以弹窗的形式出来的,如下图:
这里写图片描述
此时Activity A还处于可见状态,其生命周期如下:注意是在接听电话后,不是在弹窗弹出时,弹窗弹出时是没有反应的,可能跟具体的系统有关。

接听电话后跳转到通话界面:onPause挂断电话后返回Activity A:onResume

但是如果像下面这种,来电提醒是以一个新的界面形式出现的,如下图:
这里写图片描述
此时Activity A处于不可见状态了,其生命周期如下:

由于来电从Activity A跳转到了来电提醒界面:onPause -> onStop挂断电话或者结束通话后返回Activity A:onRestart -> onStart -> onResume

3、在Activity A处于running状态时点击电源按钮熄屏再唤醒屏幕回到A,或者按下home键回到桌面再返回A,其生命周期都如下所示:

(1)onPause -> onStop(2)onRestart -> onStart -> onResume

4、未设置Activity A的属性,从竖屏状态转为横屏状态时,然后再转换为竖屏状态:
这里写图片描述

android:screenOrientation="portrait" //只竖屏android:screenOrientation="landscape" //只横屏android:configChanges="orientation|keyboardHidden"(跟踪framework层代码,是由于google在android3.2中添加了screensize改变的通知,在转屏的时候,不仅是orientation发生了改变,screensize同样也发生了改变所以要添加“screenSize”)

启动模式

使用android:launchMode=”standard|singleInstance|singleTask|singleTop”来控制Acivity任务栈,改变Activity的启动模式。其中,具体的模式内容请参阅彻底弄懂Activity四大启动模式

任务栈是一种后进先出的结构。位于栈顶的Activity处于焦点状态,当按下back按钮的时候,栈内的Activity会一个一个的出栈,并且调用其onDestory()方法。如果栈内没有Activity,那么系统就会回收这个栈,每个APP默认只有一个栈,以APP的包名来命名.

standard : 标准模式,每次启动Activity都会创建一个新的Activity实例,并且将其压入任务栈栈顶,而不管这个Activity是否已经存在。Activity的启动三回调(onCreate()->onStart()->onResume())都会执行。

singleTop : 栈顶复用模式.这种模式下,如果新Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,所以它的启动三回调就不会执行,同时Activity的onNewIntent()方法会被回调.如果Activity已经存在但是不在栈顶,那么作用与standard模式一样.

singleTask: 栈内复用模式.创建这样的Activity的时候,系统会先确认它所需任务栈已经创建,否则先创建任务栈.然后放入Activity,如果栈中已经有一个Activity实例,那么这个Activity就会被调到栈顶,onNewIntent(),并且singleTask会清理在当前Activity上面的所有Activity.(clear top)

singleInstance : 加强版的singleTask模式,这种模式的Activity只能单独位于一个任务栈内,由于栈内复用的特性,后续请求均不会创建新的Activity,除非这个独特的任务栈被系统销毁了

Activity的堆栈管理以ActivityRecord为单位,所有的ActivityRecord都放在一个List里面.可以认为一个ActivityRecord就是一个Activity栈

阅读全文
0 0
原创粉丝点击