安卓四大启动模式介绍并和生命周期的联系

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/likui19921224/article/details/79203993

standard 模式/缺省启动模式- 标准启动模式:
1. 在manifest中配置:
android:launchMode=”standard”
2.启动方式Activity_A -> Activity_A(下面简称A)
3.标准启动模式:每次启动都会创建一个activity 用上面的2启动方式启动 可以在栈中就有2个A实例;
所以使用返回键从第2个A将返回到第一个A;
我们下面就重点阐述这一个返回的过程:
(提示:)进出栈规则讲究先进后出
重点1>返回时:将设我们在第一个A中包含有编辑框 编辑框中有参数 那么返回时是否还能保存状态
重点2>如果能有上面的状态 那么从哪个生命方法开始的;

 ![这里写图片描述](https://img-blog.csdn.net/20180129162759195?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlrdWkxOTkyMTIyNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

我们跳转到2 :温馨提示:我们使用startactivity的时候不要使用finish();
从2返回到1 可以看到1竟然还是第一A跳转时的状态:

那么它回来的时候是从哪个生命周期开始的呢?
我们是从栈里拿到的第一个activity 那么肯定不会oncreate了,
那么从哪里呢? onrestart!至于为什么从onrestart开始 大家去看生命周期
:
简单提示下:只要activity不能被看见了 基本都是从onrestart开始
另外值得一提的 从栈里取出了第一个 那么低2个我们是没有finish的 那么它会怎么样? 销毁!ondestory

2.生命周期2:singletop:A->A
简单的来说就是如果栈顶是当前activity 那么就不会新建一个activity.
大家听起来可能很犯迷糊 .我再栈顶了还启动当前activity干嘛?其实我也迷糊过.因为我曾经看过别人这么写代码:(刷新数据)就是自己跳自己咯.
不多说了,反正你玩你的 我玩我的咯
还是那生命周期来说明:
A本身位于栈顶了,在此启动 由于不会创建新的实例 拿出的依然是本身
A似乎就没变化过?是不是不会触发任何生命周期呢?答案是不是的.会触发 :
触发过程 onpause->onresume 而不是从onrestart开始的.

注意:返回的时候:我们没有创新新的实例会直接返回到(假想)第一个A的上级(两个是同一个A实例)

3.singleTask:

只有一个实例:
在同一个栈中 如果不存在 新建实例
如果存在 那么会销毁在之上的所有实例

 在别的程序中启动  那么会新建一个站来启动这个activity     那么该activity只会存在一个栈中

简单的举例给大家说明:
在同一个程序中:
启动方式是如下:
A-B-C-B(B:singtask)
栈里的存在方式 ABC 变成 AB 那么声明周期的变化是从ONrestart开始的
4.singleInstance

只有一个实例:并且这个实例独立运行于一个activity任务栈中Task
简单的来说 就是该当启动这个activity的时候会新建一个栈 启动其他的时候不会放在该栈中
可以使用getTASKid去验证
A->B ->B
//注意 如果再次启动本身 并不会新开一个栈 放入新站中
//生命周期显示 会继续拿出第一次启动的那个activity 本身 由于被至于栈顶 会从onresume开始
//如果返回时 由于栈中唯一性 就会直接退出程序
//A->B->A(A是singleInstance模式)
//这里只能是跳转
//根据栈显示:A第一的ID 假设为16 那么再次回到一定不是16 而是18 也就是会新建一个activity,
//那么栈为16的activity的生命周期如何?
//并不会被销毁 (如果没有finish)

猜你喜欢

转载自blog.csdn.net/likui19921224/article/details/79203993