Activity的启动模式和Intent标记位

 

转载请标明出处

http://blog.csdn.net/mohan6/article/details/73176562

本文作者:【默寒的博客】

Activity的四种启动模式:

便于记忆:

1、standard(默认)

    每次跳转都会创建一个新的Activity对象

2、singleTop     栈顶单实例

    a、当activity不存在的时候,创建一个新的Activity对象加载到当前Task里面

    b、如果Activity已经存在,并处于栈顶,开启自身不会再创建新的Activity对象

    c、如果Activity已经存在,处于栈中,开启该界面创建一个新的Activity对象加载到当前Task中

3、singleTask    栈中单实例 

    a、当Activity不存在的时候,创建一个新的Activity对象加载到当前Task里面

    b、如果Activity已经存在,并处于栈顶,开启自身不会再创建新的Activity对象

    c、如果Activity已经存在,处于栈中,开启该界面把目标Activity之上的所有Activity都销毁

4、singleInstance  全局单实例

    a、如果Activity不存在的时候,创建一个新的Task,然后把创建目标Activity添加到Task中

    b、如果目标Activity已经存在,把目标Activity所在的Task移到前台

累赘的表述:

 

1、standard:每一次start都会开启一个新的activity,并且位于栈顶
2、singleTop:如果要开启的activity位于栈顶,那么重用该activity,并且走onNewIntent而不走onCreate;如果不是位于栈顶,那么重新创建activity,并位于栈顶
3、singleTask:一个栈中只有唯一的该activity实例,如果要开启的activity位于栈中,那么将位于其上的activity全部出栈,使要开启的activity位于栈顶,并且同样的是走onNewIntent而不走onCreate;如果要开启的activity不在栈中,那么重新创建
4、singleInstance:一个栈中只有一个activity。如果要开启的activity位于栈中,那么再次开启的话,就是将整个栈至于所有栈的前面进行展示。
有四种启动模式

* standard 标准的启动模式。
一个activity默认就是标准的启动模式。开启新的activity,activity就会被创建出来,加入到任务栈的栈顶。
适用于绝大多数的应用场景。

* singleTop 单一顶部启动模式。
如果发现,这个activity已经被启动了,并且在任务栈的栈顶,activity就不会别重新创建。
解决一个用户体验的问题。避免已经打开的界面重复的被打开多次。
          for(int i = 0;i<100;i++){
弹出收藏夹
          }
浏览器添加到书签,singletop
>在同一个任务栈里面可以有多个实例存在。

* singleTask 单一任务栈启动模式。
 开启新的activity的时候,会去检查任务栈里面是否有这个activity的实例存在,如果有实例存在,就直接清空这个实例上面的所有的activity,复用这个已经存在的activity实例。
>在同一个任务栈里面只有一个实例存在。
在什么时候使用singletask模式。
BrowserActivity 浏览器 开销(内存占用,cpu占用)非常大,singletask。保证在一个任务栈里面只有一个实例存在。
webkit 内核 页面。
  html解析器
  html渲染器
  css 渲染器
  javascript 执行引擎
>>如果一个activity的资源开销非常大,建议使用singletask的启动模式。
浏览器的activity使用的就是singletask的启动模式。

* singleinstance 单一实例。
类似于java中的单例模式,单态模式。在整个android手机操作系统里面只有一个activity的实例存在。
singleinstance启动模式的activity会运行在自己**_单独_**的任务栈里面
>如果你希望一个activity,在整个手机操作系统里面只有一个实例存在。配置singleinstance。
>InCallScreen 通话的activity配置模式是singleinstance的。在整个手机操作系统里面只有他一个实例存在。

 

Intent标志位

    intent.setFlags(XXXXX);

    1、Intent.FLAG_ACTIVITY_SINGLE_TOP

        跟加载模式中singleTop栈顶单实例类似

        

    2、Intent.FLAG_ACTIVITY_CLEAR_TOP

        跟加载模式中singleTask区别:

            如果activity已经存在,并处于栈中,会把目标Activity 之上的所有Activity都销毁(包括自身),重新创建一个新的Activity

        

    3、Intent.FLAG_ACTIVITY_NEW_TASK

        如果在service中跳转Activity,必须去设置意图标志位

            Intent.FLAG_ACTIVITY_NEW_TASK

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值