standard、singleTop、singleTask、singleInstance
活动的四种启动模式
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相关推荐
- Activity之launchMode:singleTop,singleTask与singleInstance
相关内容,可以参见官方网址: http://developer.android.com/guide/components/tasks-and-back-stack.html 如图所示,如果ABC三个A ...
- standard、singleTop、singleTask和singleInstance原理分析
关键函数入口:startActivityUncheckedLocked 我们知道启动一个Activity有四种方式:standard(标准启动模式).singleTop.singleTask.si ...
- standard、singleTop、singleTask和singleInstance四种Activity启动模式的理解
之前自学android的时候,单从视频和书本上对这四种启动模式仅仅有了初步的字面上的理解.最近实战了下,也对这四种启动模式有了比较清晰的概念. 首先说下什么是Activity,按照我的理解,我们在手机 ...
- # android开发:4-1、Activity启动方式、生命周期、不同activity的数据传递
4.Activity活动简介 什么是Activity: 如何创建Activity: Activity启动方式: Activity的生命周期: 不同Activity之间数据的传递: 什么是Activit ...
- ggplot2笔记2:图层的使用——基础、怎样加标签、注释
一点碎碎念:今天开始看第三章Toolbox, 主要讲的是图层的用法,在图像的基础上,图层可以让plot的信息更加丰富和完整,于是就有了怎样加标签,加注释等等.这些内容虽然不难但是很琐碎,由于R基础薄弱 ...
- DHCP协议格式、DHCP服务搭建、DHCP协商交互过程入门学习
相关学习资料 http://www.rfc-editor.org/rfc/rfc2131.txt http://baike.baidu.com/view/7992.htm?fromtitle=DHCP ...
- c运行库、c标准库、windows API的区别和联系
c运行库.c标准库.windows API的区别和联系 C运行时库函数 C运行时库函数是指C语言本身支持的一些基本函数,通常是汇编直接实现的. API函数 API函数是操作系统为方便用户设计应用 ...
- linux加密解密基础、PKI及SSL、创建私有CA
linux加密解密基础.PKI及SSL.创建私有CA 1.加密解密基础: 数据在网络中传输过程中要保证三个要点: (1)数据的完整性:防止数据在传输过程中遭到未授权用户的破坏或篡 ...
- Java:计算机编程语言Java的简介、编程环境/工具、如何学习Java之详细攻略
Java:计算机编程语言Java的简介.编程环境/工具.如何学习Java之详细攻略 目录 Java的简介 1.Java的工作原理--基于Eclipse等编程Java语言→定义Java类→Java虚拟机 ...
- DL之MobileNetV2:MobileNetV2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之MobileNet V2:MobileNet V2算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 MobileNetV2算法的简介(论文介绍) MobileNet V2算法 ...
最新文章
- msvcrt.lib和LIBCD.lib链接冲突
- Linux iterm 快捷键
- R 学习 - 富集分析泡泡图回应
- 久等了!支付宝集五福活动官宣: 今年又有新玩法
- java计算点在圆内外_java – 在O((n s)log n中计算圆交叉点)
- Java线程 生产者--消费者模式总结(二)
- casue usb kb 找不到驱动程序_手把手教你安装喷墨打印机驱动程序
- 积分墙为什么要做反作弊
- C语言 6习题13 编一程序,将两个字符串连接起来,不要用strcat函数。
- WEB前端开发:轮播图的实现(H5+C3+JavaScript)(JQuery)
- RocketMQ学习笔记(2)
- 玩游戏电脑IP被封了,怎么修改电脑IP
- [经验栈]C#监测IPv4v6网速及流量
- 计算机桌面排列,如何进行桌面图标排列 让你的桌面一秒变酷炫【图文教程】...
- ASCII码中不同字符分类、含义及相关技巧
- 手机如何在线图片转文字?2个方法,轻松提取图片文字
- 普通二/三本学校程序员(搬砖工)的出路?
- Google的OR-Tools
- 【Linux】什么是进程(process)?
- 【转】SIMCOM的AT指令