Activity的四种启动模式

1 standard模式,Activity默认模式,Activity在被调用时会创建一个新的实例,所有实例处理同一个 Intent对象。

2 singleTop模式,如果Task已经有一个这样的Activity 在堆栈的顶端,那么不会有新的实例创建,任务会使用当前顶端的Activity实例来处理Intent对象,如果Activity不在顶端,还是会创建新实例。

3 singleTask模式, Task中除了包含该Activity,还可以包含其他Activity,但是,如果发给该Activity的Intent对象到来时该Activity不在堆栈顶端,那么该Intent对象将被丢弃,但是界面还是会切换到当前 的Activity。

4 singleInstance,Activity将是Task堆栈中的唯一的 Activity, 当前Task收到的Intent 都由它处理。




一:Standard的启动模式

 Standard是默认的模式每开始一个activity,就会在栈中加一个activity,相同的也会加,
 
所以加多少个,就要按多少次返回键才能回到最初的界面
 
二:singleTop的启动模式
1.清单配置:
       <activity 
 
            android:name="com.itcode.taskstack.SecondActivity"
 
            android:label="@string/_second"
 
            android:launchMode="singleTop">
 
</activity>
 
    Singletop:如果任务栈的栈顶已经存在这个activity的实例,
 
  不会创建新的activity,而是利用旧的activity实例
 
 调用 旧的activity的onNewIntent()方法
 
2.作用:
避免一个糟糕的用户体验,如果这个界面已经被打开且在任务栈的栈顶,就不会重复开启了
 
 
 
三:Singletask的启动模式:
1.Androidfest配置:
        <activity 
 
            android:name="com.itcode.taskstack.SecondActivity"
 
            android:label="@string/_second"
 
            android:launchMode="singleTask">
 
     </activity>
 
2.作用:
singletask的启动模式:在任务栈里面只允许一个实例存在,假如02是singletask,
 
栈里是:01 02 01 03 若此时开启02,则会复用这个已经存在的activity,并且把当前activity上面其他的activity从任务栈里清空!
 
3.应用场景:
浏览器:底层使用的是webkit c 内核,初始化一次需要申请很多的内存资源,占用cpu时间
 
所以使用singletask,保证在任务栈里只会有一个实例存在
 
四:singleInstance的启动模式(相当于实例):
 1. Androidfest的配置:
 <activity 
 
            android:name="com.itcode.taskstack.SecondActivity"
 
            android:label="@string/_second"
 
            android:launchMode="singleInstance">
 
        </activity>
 
2.特点:
singleInstance的启动模式更加极端,
 
开启新的activity,会给自己创建一个单独的任务栈
 
 3.应用场景:
在整个手机操作 系统里面只会有一个该activity的实例存在,
 
所以多个应用程序共享这个activity的实例,有线程安全问题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值