Activity(活动)的启动模式
在实际项目中我们应该根据特定的需求为每个活动指定相应的启动模式。启动模式一共分为4种:standar、singleTop、singleTask和singleInstance。可以在AndroidManifest.xml文件中通过标签指定android:launchMode属性来选择启动模式。
1、standard
standard是活动的默认启动模式,在不进行显示指定的情况下,所有活动都会自动使用这种启动模式。之前提到过,Android是使用返回栈来管理活动的。在standard模式下,每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于使用standard模式的活动,系统不会在乎这个活动是否在返回栈中存在,每次启动都会创建该活动的一个新的实例。
例:我之前的一个项目,直接在上面的修改的。源代码是黑色,添加的高亮了
@Overrideprotectedvoid onCreate(Bundle savedInstance){super.onCreate(savedInstance);Log.d("FirstActivity",this.toString());setContentView(R.layout.first_layout);Button button1=(Button)findViewById(R.id.button);button1.setOnClickListener(newView.OnClickListener(){@Overridepublicvoid onClick(View v){Intent intent=newIntent(FirstActivity.this,FirstActivity.class);startActivity(intent);}});}
代码看起来有点奇怪,在FirstActivity的基础上启动FirstActivity。从逻辑上来将是没有意义的,不过我们重点在于研究standard模式,因此不必在意实际用途。我同样在代码中加了一行打印代码,方便检测。这是运行程序每按一次button都会在logcat打印出一条信息。
从打印的信息可以看出,每单击一次按钮就会创建出一个新的FirstActivity实例。同时协议栈也会存在相应个数的实例,这是我们需要按下相应次数才能退出程序
standard模式的原理示意图

2、singleTop
当活动的启动模式指定为singleTop,在启动活动的时候如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例
例:只要在当前活动下增加一行模式选择就可以了
android:name=".FirstActivity"//当前活动android:launchMode="singleTop";//选择singleTop模式
运行程序时,查看logcat会看到无论点击多少次button只有一个实例被创建,不过如果FirstActivity不处于栈顶位置还是会创建新的实例
singleTop模式原理示意图

3、singleTask
当活动的启动项目指定为singleTask,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现就直接调用,并把这个活动之上的所有活动出栈。没有发现就重新创建。
例:
android:name=".FirstActivity"//当前活动android:launchMode="singleTask";//选择singleTask模式
@Overrideprotectedvoid onDestory(){super.onRestart();Log.d("SecondActivtiy","onDestory");}
从FirstActivity界面进入到SecondActivity界面,然后在SecondActivity按下button返回到FirstActivity界面。
通过打印信息可以看出,在SecondActivity中启动FirstActivity的下面,于是SecondActivity会从返回栈中出栈,而FirstActivity会重新成为了栈顶活动,因此FirstActivity的onRestart()方法和SecondActivity()的onDestory()方法会得到执行。
singleTask模式的原理示意图
# singleInstance
singleInstance模式应该是最复杂的一个启动模式了。指定为singleInstance模式的活动会启用一个新的返回栈来管理这个活动。这样做的好处就在于,这种模式下会有一个单独的返回栈来管理活动,不管是哪个应用程序来访问这个活动,都可以用同一个返回栈,也就解决了共享活动实例的问题。
singleInstance模式的原理示意图:

Activity(活动)的启动模式的更多相关文章
- Android学习之基础知识四-Activity活动7讲(活动的启动模式)
在实际的项目开发中,我们需要根据特定的需求为每个活动指定恰当的启动模式.Activity的启动模式一共有4种:standard.singleTop.singleTask.singleInstance. ...
- Android学习笔记(六)——活动的启动模式
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 活动的启动模式共有四种: standard.singleTop.singleTask 和 singleInst ...
- Android:活动的启动模式
启动模式一共有四种,分别是 standard .singleTop . singleTask 和 singleInstance , 可 以 在 AndroidManifest.xml 中 通 过 给 ...
- Day2 Activity生命周期/启动模式/最佳实践
Android是使用任务(Task)来管理活动的,这个栈被称作返回栈(Back Stack). Activity类中定义了7个回调方法: onCreate().在活动第一次被创建时调用,应该在这个方法 ...
- Android中Activity的四大启动模式实验简述
作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握.今天我们就来通过实验演示,来帮助大家理解Activ ...
- Android Activity 四种启动模式
task和back stack(任务和回退栈) 任务启动,task被加入到回退栈的栈顶,返回的时候回退栈的栈顶任务会被弹出,并被销毁,栈中的前一任务恢复运行,当activity销毁是,系统不会保留ac ...
- Activity四种启动模式与Flag及affinity属性详解
Activity有四种加载模式:standard(默认).singleTop.singleTask.singleInstance standard:Activity的默认加载模式,即使某个Activi ...
- Android活动的启动模式
1. standard 标准模式,是活动默认的启动模式,在不进行显示指定的情况下,所有活动都会自动使用这种模式. Android使用返回栈管理活动,在standard模式下,每当启动一个新的活动,它就 ...
- Activity四种启动模式
转载博客:http://blog.csdn.net/shinay/article/details/7898492 Activity启动方式有四种,分别是:standardsingleTopsingle ...
- activity 四种启动模式
前言 Activity的启动模式决定了Activity的启动运行方式 四种模式 Activity启动模式设置: <activity android:name=".MainActivit ...
随机推荐
- Java多线程学习(五)线程间通信知识点补充
系列文章传送门: Java多线程学习(二)synchronized关键字(1) Java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Java多 ...
- mysql之数据库操作进阶(三)
环境信息 数据库:mysql-5.7.20 操作系统:Ubuntu-16.04.3 查询 条件查询 # 使用where关键字 select * from 表名 where 条件 # 比较运算符 > ...
- devinet_ioctl
Kernel: 4.12.6 deinet_ioctl:获取或者设置接口的地址,掩码,标记等信息: 注意,使用SIOCSIFFLAGS关闭设备,如果使用了别名,则删除对应ip,如果其为主ip,并且从i ...
- python基础===Sublime Text 3 快捷键
选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更改所有相同的变量名.函数 ...
- CentOS在ssh下远程重装系统
CentOS在ssh下远程重装系统 http://www.zxsdw.com/index.php/archives/913/ 国外VPS服务器一般都有控制面板,有很多种系统可自行安装,但国内有些IDC ...
- service XXX start启动报start: Rejected send message, 1 matche
转,原文地址:http://blog.sina.com.cn/s/blog_56d8ea9001018w1l.html [问题]start: Rejected send messag现象:crifan ...
- hive-group by的时候把两个字段变成map
源表结构: pcgid string mobilegid string value double 测试数据如下: p1 m1 ...
- beatfullsoup
阅读目录 一 介绍 二 基本使用 三 遍历文档树 四 搜索文档树 五 修改文档树 六 总结 一 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通 ...
- hdu 1247 (字典树入门)
Hat’s Words Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 数据结构与算法之--高级排序:shell排序和快速排序
高级排序比简单排序要快的多,简单排序的时间复杂度是O(N^2),希尔(shell)排序大约是O(N*(logN)^2),而快速排序是O(N*logN). 说明:下面以int数组的从小到大排序为例. 希 ...