Activity常用的4种载入方式

作者: o动感超人o | 来源:发表于2017-08-02 15:59 被阅读96次

一:xml配置

1.android:launchMode="standard"

这是默认的方式,每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否已经存在.在这种模式下,谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的栈中
当我们用ApplicationContext去启动standard模式的Activity的时候会报错,因为standard模式的Activity默认会进入启动它的Activity所属的任务栈中,但是由于非Activity类型的Context(如ApplicationContext)并没有所谓的任务栈,所以这就有问题了.解决这个问题的方法是为待启动的Activity指定FLAG_ACTIVITY_NEW_TASK标记位,这样启动的时候就会为它创建一个新的任务栈

2.android:launchMode="singleTop"

栈顶复用模式,在这种模式下,如果新Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时它的onNewIntent方法会被回调,调用此方法的参数我们可以取出当前请求的信息.需要注意的是,这个Activity的onCreate,onStart不会被系统调用,因为它并没有发生改变.如果新Activity的实例已存在但不是位于栈顶,那么新Activity仍然会重新创建

3.android:launchMode="singleTask"

栈内复用模式,这是一种单实例模式,在这种模式下,只要Activity在一个栈中存在,那么多次启动此Activity都不会重新创建实例,和singleTop一样,系统也会回调其onNewIntent.如果被启动的Activity不在栈顶,那么就会把它上面的Activity出栈

4.android:launchMode="singleInstance"

加强的栈内复用模式,它除了具有singleTask模式的所有特性外,还加强了一点,那就是具有此种模式的Activity只能单独的位于一个任务栈中,换句话说,比如Activity A是singleInstance模式,当A启动后,系统会为它创建一个新的任务栈,然后A独自在这个新的任务栈中,由于栈内复用的特性,后续的请求均不会创建新的Activity,除非这个独特的任务栈被系统销毁了

二.设置Intent的Flag标志

1.FLAG_ACTIVITY_NEW_TASK

如果当前app还没有任务栈会创建一个任务栈然后把Activity放进去
如果已经有了就用已存在的任务栈
如果启动Activity的Context没有任务栈并且没有指定此标记位会报错,例如用ApplicationContext启动Activity

2.FLAG_ACTIVITY_CLEAR_TOP或者FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP

和singleTask效果是一样的

设被启动的Activity的名字为A:
当A已存在栈中的时候
1.当A的启动模式是standard的时候,A和它之上的Activity都会出栈然后创建新的A并放入栈中
2.当A的启动模式是其它3种的时候(singleTask,singleInstance,singleTop),A之上的Activity都会出栈然后调用已存在的A的onNewIntent方法
当A不存在栈中的时候用FLAG_ACTIVITY_NEW_TASK |FLAG_ACTIVITY_CLEAR_TOP会创建一个A,如果不加FLAG_ACTIVITY_NEW_TASK会报错

3.FLAG_ACTIVITY_SIGNLE_TOP

和singleTop效果是一样的

4.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

具有这个标记的Activity不会出现在历史Activity的列表中,当某些情况下我们不希望用户通过历史列表回到我们的Activity的时候这个标记比较有用.它等同于在XML中指定Activity的属性android:excludeFromRecents="true"

相关文章

  • Activity常用的4种载入方式

    一:xml配置 1.android:launchMode="standard" 这是默认的方式,每次启动一个Act...

  • day6 阿来

    安装并载入包,dplyr包常用功能介绍 安装和载入包 dplyr包常用功能介绍 总结 要多熟悉常用的R包功能

  • 一次搞懂Activity的启动方式和启动模式

    一、Activity的启动方式 1.显式 方法一 构造方法传入Component,最常用的方式 方法二 setC...

  • 【工具】onActivityResult的简易处理

    简介 startActivityForResult相信大家都很熟悉,Activity数据回传的常用方式,配合onA...

  • Intent 启动相关FLAG

    常用FLAG标志 FLAG_ACTIVITY_CLEAR_TASK 清空任务栈,常用 FLAG_ACTIVITY_...

  • OpenGL基础纹理

    第五章 OpenGL基础纹理 本章内容: 一、常用函数 像素存储方式 从颜色缓存区内容作为像素图直接读取 载入纹理...

  • OpenGL基础纹理

    第五章 OpenGL基础纹理 本章内容: 一、常用函数 像素存储方式 从颜色缓存区内容作为像素图直接读取 载入纹理...

  • InterFilter的匹配规则

    先附上Activity常用的flags:Flag_Activity_New_TASK:指定"singleTask"...

  • android adb常用命令

    一、启动/关闭类 1. 启动activity 启动activity隐式action方式: 显示activity方式...

  • Activity的启动方式

    一,Activity的启动方式? 显示方式 :intent启动Activity时指定了Activity的包名和类名...

网友评论

  • 了不起的潘:don't bb show me code. 哈哈,如果有代码演示就更好了。😁😁
    o动感超人o:这些都是我测试过总结的,你自己写个代码试试应该不难

本文标题:Activity常用的4种载入方式

本文链接:https://www.haomeiwen.com/subject/zoaelxtx.html