Activity四种启动模式说明

1,standard标准模式:

每次启动一个Activity都会重新创建一个实例,即调用Activity创建时的生命周期方法onCreate,onStart,onResume;被启动的Activity会自动添加到启动它的Activity的任务栈中,因此用ApplicationContext启动standard模式的Activity时会报错(Context没有所谓的任务栈)

2,singleTop栈顶复用模式:

新启动的Activity已经位于任务栈的栈顶,那么此Activity将不会被重建,而是会回调其onNewIntent方法,如果新启动的Activity不是位于栈顶,此时将重新创建新的Activity实例并添加到栈顶.

3,singleTask栈内复用模式:

这是一种简单的单例模式,这种模式下只要被启动的Activity位于栈内,那么无论它是否位于栈顶都不会重新创建新的Activity实例,而是直接将其调回到栈顶并回调其onNewIntent方法,如果在其上有其他Activity的时候会将这些Activity进行出栈处理

4,singleInstance单实例模式:

这是一种加强的singleTask模式,除了具有singleTask的特点外还加了一点,具体此模式的Activity会单独位于一个独立的任务栈,如ActivityA为singleInstance启动模式,当A启动后,系统会单独为其建一个任务栈,A将独自位于这个任务栈中,以后的请求均不会创建新的Activity直至这个任务栈被销毁.


任务栈的指定:

AndroidMenifest中设置

<activity
            android:name=".TestActivity" Activity类名
            android:allowTaskReparenting="true" 允许应用外的请求启动此Activity
            android:configChanges="screenSize" 设置屏幕的一些参数,例如取消横竖屏切换
            android:launchMode="singleTask" Activity启动模式
            android:taskAffinity="com.abc.task" /> 设置Activity所属栈名
android:taskAffinity标签设定了栈名,此标签只在两种情况下起作用,一种为singleTask启动模式下的Activity,另一种为配合andriod:allowTaskReparenting使用;

allowTaskReparenting为ture时,当应用A启动了应用B的某个Activity,当应用B也被启动后,此Activity会直接从应用A的任务栈转移到应用B的任务栈中

Activity启动模式还可以再代码中进行设置:

Intent intent = new Intent();
        intent.setClass(this,TestActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
代码设置会优先于清单文件设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值