Activity的启动模式

首先说一下任务栈,任务栈是一种“后进先出”的栈结构,每单机back键,栈中的activity都会按次序出栈,直到栈空为止,这时候系统就会回收这个任务栈。

下面说一下Activity的启动模式:

1.standard

标准模式,这也是系统的默认模式。每次启动一个Activity,都会创建一个新的实例,不管这个实例是否已经存在。比如ActivityA启动他自己本身,这时在栈中已经有了ActivityA的实例,但是在启动之后,会有一个新的实例被创建,而且被压入栈中,并且在栈顶。

在这种标准模式下,谁启动了Activity,这个Activity就会被压入谁的栈中。所以,当我们用ApplicationContext启动标准模式(standard模式)下的Activity时,程序会报错,因为非Activity类型的Context没有任务栈。所以程序报错。那么如何解决这个问题呢,在要启动的Activity中制定FLAG_ACTIVITY_NEW_TASK标记位即可。


2.singelTop

栈顶复用模式

在这种模式下,如果新Activity已经位于栈的栈顶,那么不会创建新的Activity对象。

比如栈内的顺序为ABCD,这个时候启动D,栈内还是为ABCD,如果为standard,模式,栈内会变成ABCDD。


3.singleTask

栈内复用模式

这是一种单实例模式,这种模式下,只要activity在栈中存在,多次创建activity都不会重新创建实例。

比如ActivityA,被创建的时候系统会找A想要的栈是否存在, 如果不存在那么新建一个栈,如果存在,那么看A是否在栈中有实例存在,有的话把A的实例调到栈顶,比如栈中的顺序为DACB,在singleTask模式下启动A,栈内顺序会变成DA,因为singleTask默认具有clearTop的效果,会导致A上面的Activity都出栈。如果实例不存在,就创建实例压入栈中,比如原来为DCB,现在变成DCBA。


4.singleinstance

单实例模式,这是加强版的singleTask,它具有singleTask的所有特性,除此之外,具有此模式的Activity只能单独的运行在一个栈中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值