活动的四种启动模式

standard

standard是活动默认的启动模式,在不进行明确指定的情况下。所用活动都会自动的使用该模式启动。
在该模式下,每当启动一个新的活动,他就会在返回栈中入栈,并处于栈顶的位置。对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。

    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_start);Log.d(TAG, this.toString());button1=findViewById(R.id.start_btn);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(StartActivity.this,StartActivity.class);//此处跳转的是当前的活动,便于研究standardstartActivity(intent);}});}


如上图显示,连续点了两次跳转,每点击以此跳转按钮都会创建一个新的实例,此时返回栈也会存在三个实例,因此需要三次back键才能退出程序

singleTop

在启动活动时,若返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的实例,不过当该活动不在栈顶时还是会创建一个新的实例的。

可在AndroidManifest.xml中修改活动的启动模式,如下:

        <activity android:name=".ActivityStart.StartActivity"android:launchMode="singleTop">

singleTask

当活动的启动模式为singleTask时,每次启动活动时,都会在返回栈中先检查是否存在该活动的实例,如果发现存在,则会直接使用该实例,不会再另外创建实例,并把该活动之上的所有活动统统出栈,如果没有发现会创建一个新的实例

singleInstance

singleInstance不同与其他模式,singleInstance模式会启动一个新的返回栈来管理这个活动(如果singleTask模式指定了不同的taskAffity,也会启动一个新的返回栈)
假如我们的程序有一个活动是允许其他程序调用的,使用该模式可以实现其他程序和我们的程序共享这个活动的实例。不管是哪个程序访问这个活动们都共用另外创建的这个返回栈。

首先设置
Start1Activity的启动模式为singleInstance,其他活动的模式还是默认
StartActivity

    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_start);Log.e(TAG, "this task id is" + getTaskId());//得到当前栈IDbutton1=findViewById(R.id.start_btn);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(StartActivity.this,Start1Activity.class);startActivity(intent);}});}

Start1Activity

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.e(TAG, "this task id is" + getTaskId());//得到当前栈IDsetContentView(R.layout.activity_start1);button1=findViewById(R.id.start_btn1);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(Start1Activity.this,Start2Activity.class);startActivity(intent);}});
}

Start2Activity

 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.e(TAG, "this task id is" + getTaskId());//得到当前栈IDsetContentView(R.layout.activity_start2);button1=findViewById(R.id.start_btn2);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(Start2Activity.this,Start2Activity.class);startActivity(intent);}});}

AndroidManifest.xml

 <activity android:name=".ActivityStart.StartActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".ActivityStart.Start1Activity"android:launchMode="singleInstance"></activity><activity android:name=".ActivityStart.Start2Activity"></activity>

StartActivity和Start2Activity的栈ID一致,而Start1Activity的栈ID不同

standard、singleTop、singleTask、singleInstance相关推荐

  1. Activity之launchMode:singleTop,singleTask与singleInstance

    相关内容,可以参见官方网址: http://developer.android.com/guide/components/tasks-and-back-stack.html 如图所示,如果ABC三个A ...

  2. standard、singleTop、singleTask和singleInstance原理分析

    关键函数入口:startActivityUncheckedLocked   我们知道启动一个Activity有四种方式:standard(标准启动模式).singleTop.singleTask.si ...

  3. standard、singleTop、singleTask和singleInstance四种Activity启动模式的理解

    之前自学android的时候,单从视频和书本上对这四种启动模式仅仅有了初步的字面上的理解.最近实战了下,也对这四种启动模式有了比较清晰的概念. 首先说下什么是Activity,按照我的理解,我们在手机 ...

  4. # android开发:4-1、Activity启动方式、生命周期、不同activity的数据传递

    4.Activity活动简介 什么是Activity: 如何创建Activity: Activity启动方式: Activity的生命周期: 不同Activity之间数据的传递: 什么是Activit ...

  5. ggplot2笔记2:图层的使用——基础、怎样加标签、注释

    一点碎碎念:今天开始看第三章Toolbox, 主要讲的是图层的用法,在图像的基础上,图层可以让plot的信息更加丰富和完整,于是就有了怎样加标签,加注释等等.这些内容虽然不难但是很琐碎,由于R基础薄弱 ...

  6. DHCP协议格式、DHCP服务搭建、DHCP协商交互过程入门学习

    相关学习资料 http://www.rfc-editor.org/rfc/rfc2131.txt http://baike.baidu.com/view/7992.htm?fromtitle=DHCP ...

  7. c运行库、c标准库、windows API的区别和联系

    c运行库.c标准库.windows API的区别和联系 C运行时库函数 C运行时库函数是指C语言本身支持的一些基本函数,通常是汇编直接实现的.    API函数 API函数是操作系统为方便用户设计应用 ...

  8. linux加密解密基础、PKI及SSL、创建私有CA

    linux加密解密基础.PKI及SSL.创建私有CA 1.加密解密基础:            数据在网络中传输过程中要保证三个要点: (1)数据的完整性:防止数据在传输过程中遭到未授权用户的破坏或篡 ...

  9. Java:计算机编程语言Java的简介、编程环境/工具、如何学习Java之详细攻略

    Java:计算机编程语言Java的简介.编程环境/工具.如何学习Java之详细攻略 目录 Java的简介 1.Java的工作原理--基于Eclipse等编程Java语言→定义Java类→Java虚拟机 ...

  10. DL之MobileNetV2:MobileNetV2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之MobileNet V2:MobileNet V2算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 MobileNetV2算法的简介(论文介绍) MobileNet V2算法 ...

最新文章

  1. msvcrt.lib和LIBCD.lib链接冲突
  2. Linux iterm 快捷键
  3. R 学习 - 富集分析泡泡图回应
  4. 久等了!支付宝集五福活动官宣: 今年又有新玩法
  5. java计算点在圆内外_java – 在O((n s)log n中计算圆交叉点)
  6. Java线程 生产者--消费者模式总结(二)
  7. casue usb kb 找不到驱动程序_手把手教你安装喷墨打印机驱动程序
  8. 积分墙为什么要做反作弊
  9. C语言 6习题13 编一程序,将两个字符串连接起来,不要用strcat函数。
  10. WEB前端开发:轮播图的实现(H5+C3+JavaScript)(JQuery)
  11. RocketMQ学习笔记(2)
  12. 玩游戏电脑IP被封了,怎么修改电脑IP
  13. [经验栈]C#监测IPv4v6网速及流量
  14. 计算机桌面排列,如何进行桌面图标排列 让你的桌面一秒变酷炫【图文教程】...
  15. ASCII码中不同字符分类、含义及相关技巧
  16. 手机如何在线图片转文字?2个方法,轻松提取图片文字
  17. 普通二/三本学校程序员(搬砖工)的出路?
  18. Google的OR-Tools
  19. 【Linux】什么是进程(process)?
  20. 【转】SIMCOM的AT指令

热门文章

  1. java留言板源码_jsp留言板示例源码下载(入门级)
  2. 使用Resource Hacker+W32Dasm+OD移除警告窗口
  3. 夏书祥-淘宝考试最新答案
  4. ERP学习 之 财务管理
  5. 管家婆 凭证查找 Date exceeds maximum of 19-12-31 报错解决办法
  6. 创业者必备知识SWOT分析模型+案例分析
  7. 秒杀系统架构分析与实战
  8. 数字通信技术知识点二
  9. C++ 代码整洁之道
  10. LFM的脉冲压缩,即匹配滤波器的产生