Activity启动模式、Intent重复传递

来源:互联网 发布:张家港美工设计培训 编辑:程序博客网 时间:2024/06/06 14:17

初始情形

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);    }
1 0
原创粉丝点击