Android学习笔记(六)——活动的启动模式
//此系列博文是《第一行Android代码》的学习笔记,如有错漏,欢迎指正!
活动的启动模式共有四种: standard、singleTop、singleTask 和 singleInstance。可以在Manifest文件中通过给<activity>标签指定android:launchMode属性来选择启动模式。下面我们逐个看看:
一、standard模式
standard 是活动默认的启动模式。在 standard 模式(即没有显示指定其他的启动方式)下,每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于使用
standard 模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。
所以,假如我们在主活动中加入下面代码,我们每按一次button 1,就会创建一个新的MainActivity,即使原来的MainActivity已经在栈顶:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("MainActivity", this.toString());
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MainActivity.class);
startActivity(intent);
}
});
}
二、 singleTop模式
相比standard模式,在 singleTop模式下, 假若在启动活动时如果系统发现返回栈的栈顶已经是该活动, 则认为可以直接使用它,不会再创建新的活动实例。当要指定一个活动的启动模式为singleTop时,我们只需在manifest文件添加 android:launchMode="singleTop" 语句即可:
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:label="This is MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
不过此时假如我们在MainActivity中通过一个按钮启动了second_activity,然后又在second_activity中按下了一个按钮再启动MainActivity的话,那么此时的返回栈中是有两个MainActivity实例的。
三、singleTask模式
当活动的启动模式指定为 singleTask,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。这样能保证该活动在整个返回栈只有一个实例。
四、singleInstance模式
与以上三种启动模式不同, 当一个活动指定为 singleInstance 模式,系统会启用一个新的返回栈来管理这个活动,假如我们注册了三个活动:A,B,C,其中A和C为standard模式,B为singleInstance模式。然后我们通过A来启动B,再通过B来启动C。此时A和C在同一个返回栈stack1,且A在栈底,C在栈顶,而B则字另一个栈stack2。当我们按下back键时,C首先出栈,再按一次back,A出栈,这时当前的返回栈已经空了,于是就显示了另一个返回栈的栈顶活动,在按第三次back键时,才是B出栈。
//End.
Android学习笔记(六)——活动的启动模式的更多相关文章
- 10月9日Android学习笔记:活动与服务之间的通信
最近在照着<第一行代码>这本书来学安卓,顺便记下笔记.主要的内容是Android中服务的第二种启动方式,通过活动绑定服务来启动服务,实现活动与服务之间的通信. 一. 首先创建一个服务类 p ...
- android学习笔记六——Spinner
注:参考http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0105/2264.html Spinner ==> Spinner ...
- Android学习笔记六:六大布局
六大界面布局方式包括: 线性布局(LinearLayout).帧布局(FrameLayout).表格布局(TableLayout).相对布局(RelativeLayout).绝对布局(Absolute ...
- android学习笔记六
Android中Activity的Intent大全 Api Level 3: (SDK 1.5) android.intent.action.ALL_APPS android.intent.actio ...
- Android学习之基础知识四-Activity活动7讲(活动的启动模式)
在实际的项目开发中,我们需要根据特定的需求为每个活动指定恰当的启动模式.Activity的启动模式一共有4种:standard.singleTop.singleTask.singleInstance. ...
- Android:活动的启动模式
启动模式一共有四种,分别是 standard .singleTop . singleTask 和 singleInstance , 可 以 在 AndroidManifest.xml 中 通 过 给 ...
- 【转】 Pro Android学习笔记(七六):服务(1):local和remote
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Android提供服务,服务是运行在后台的 ...
- 【转】 Pro Android学习笔记(五一):ActionBar(4):标准和Tab模式
之前,我们学习的Action Bar是标准模式,Tab模式的如下图所示. 对于Tab,我们在Android学习笔记(二二): 多页显示-Tag的使用中学习过,但Action Bar的tab更适合fra ...
- 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式
可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...
随机推荐
- vmware tools 在linux中的作用
VMware Tools是VMware虚拟机中自带的一种增强工具,相当于VirtualBox中的增强功能 是VMware提供的增强虚拟显卡和硬盘性能 以及同步虚拟机与主机时钟的驱动程序. 只有在VMw ...
- JQuery------.load()从服务器获取数据并加载到某个类的方法
注意:需要在../Content/asf.txt路径下加入文件 html <button class="Btn">按钮</button> js 参数意义: ...
- libuv(不断更新)
/* * Initialize the uv_async_t handle. A NULL callback is allowed. * * Note that uv_async_init(), un ...
- linux 开机启动过程详解
Linux开机执行内核后会启动init进程,该进程根据runlevel(如x)执行/etc/rcx.d/下的程序,其下的程序是符号链接,真正的程序放在/etc/init.d/下.开机启动的程序(服务等 ...
- Tomcat配置并启用HTTPS
参考文献:http://www.cnblogs.com/xdp-gacl/p/3744053.html#blogTitle2 概述:用sun公司提供的keytool(位置为<JAVA_HOME& ...
- javascript字符串截取的substring、substr和slice
本文详细的介绍了javascript中substring().substr()和slice()三个JS字符串截取的方法,substring()方法用于提取字符串中介于两个指定下标之间的字符.subst ...
- You Can Do Research Too
You Can Do Research Too I was recently discussing gatekeeping and the process of getting started in ...
- ES6标准
1. ES6标准感觉越来越向传统语言靠拢了,以后写到ES6的标准都记录下: ,,]; // =>操作符 array.forEach(v => console.log(v)); 是不是简化了 ...
- BuildingAssetBundles in 5.x
http://docs.unity3d.com/Manual/BuildingAssetBundles5x.html
- Spot光照资料
http://forums.autodesk.com/t5/FBX-SDK/EmissiveFactor-AmbientFactor-DiffuseFactor/td-p/4230572http:// ...