Activity启动模式、Intent重复传递

初始情形

1. 三个Activity循环调用,默认启动模式失效,详细学习启动模式。

2. 页面跳转需要传递数据,使用SingleTask模式,后面传递的Intent需要刷新,否则是第一个intent数据。

四种模式

1. standard

activity默认的启动模式,即每次调用都创建一个新的实例压入栈顶。
因此,可以重复调用,在栈中叠加。

如图:反复调用自身,每次都创建实例,进行压栈。
A 为 standard 模式。

standard模式

2. singleTop

栈顶不重复叠加模式,即相同的activity叠加不创建新的实例入栈。
因此,可以间隔叠加形成循环,但不能自身调用自身。

如图,自身调用自身,不重复创建,并调用onNewIntent方法刷新intent。
A 为 singleTop 模式,B 为 standard 模式

singleTop模式

3. singleTask

单栈单实例模式,即栈中只会存在一个activity的实例,重复调用将栈中实例弹至栈顶。
因此,重复调用不创建新实例,弹栈至该实例位于栈顶,即重复调用时之前实例上的所有实例都会被弹出。

如图,重复调用,销毁掉实例上的所有其他实例,并调用onNewIntent方法刷新intent。
A 为 singleTask 模式, B 为 standard 模式

singleTask模式

4. singleInstance

多栈单实例模式,即为此模式的activity单独创建任务栈,只存放其实例。
因此,调用就会创建新的任务栈。

如图,调用singleInstance模式的activity时,会单独开辟一个任务栈,只放入A实例。
A 为 singleInstance 模式, B 为 standard 模式

singleInstance模式

特殊情况参数传递

1. singleTop 反复调用自身
2. singleTask 重复调用

这两种情况都会存在,intent数据刷新问题。

例如:A是singleTask 模式,B为standard模式。
     AB可以互相跳转,且B到A会传递数据intent。
     执行如下过程: B -> A -> B -> A   如图。

数据刷新

.
重写方法如下,刷新intent数据

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值