activity四种启动模式

 

  为什么要说activity的启动模式呢?这得先从task任务栈说起。task是一个栈结构的容器,可以放置多个Activity实例。通常默认情况下启动一个app会生成一个默认的task栈去存放activity的实例,但是有时候可能我们需要在另一个任务栈存放activity实例,或者需要activity只有一个实例,或者为了避免重复创建大量的activity等等一些需求,这就需要设置activity的启动模式以及设置Intent的flag.今天先总结下activity的四种启动方式。activity有四种启动方式,分别为:standard、singleTop、singleTask、singleInstance。设置方式为在AndroidManifest.xml中进行配置。标签熟悉为launchMode.

 <activity
            android:name=".activity.MainActivity"
            android:launchMode="singleTask"
            android:windowSoftInputMode="adjustResize" />

 

 

 

Standard

默认为此启动模式,不配置时即默认为此启动模式。在此模式下,startactivity时系统会在默认task栈中创建一个新的实例,该实例与栈中是否已有实例无关。在这种模式下,同一个task任务栈中可以同时存在多个相同activity的实例,每个实例有自己的空间与id。

SingleTop

该模式逻辑为:若task栈顶已经是要启动的activity实例,则不重新创建activity实例,若task栈顶不是要启动的activity实例,则重新创建一个activity。在这种模式下,同一个任务栈中可以存在多个activity实例。

SingleTask

该模式逻辑为:在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若已存在,则会把task栈中在其实例之上的其它Activity destory掉并调用它的onNewIntent方法,此时如果点击back键,应用将会退出。

singleInstance

该模式逻辑为:该activity实例只存在一个单独的task栈,该单独的任务栈中只有其一个activity实例,该task栈 与启动该activity所在的task栈并不是同一个。

具体的大家可以通过代码去尝试一下,实践才是检验真理的唯一标准。代码中可以通过getTaskId()获取该activity所在任务栈Id用于对比。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值