原文地址:http://blog.csdn.net/sapce_fish/article/details/52672495

Android中Activity的启动方式主要有四种

  • standard的启动方式
  • singleTop的启动方式
  • singleTask的启动方式
  • singleInstance的启动方式

demo下载地址:http://download.csdn.net/detail/sapce_fish/9641214

先说一下设置Activity启动模式的方式,在manifest文件中,给对应Activity设置android:launchMode属性,此属性有四个值,分别对应四种启动模式,如不设置此属性则默认为standar启动模式
Android——Activity四种启动模式_第1张图片

下面来分别介绍一下这四种启动方式
standard启动方式

standard启动模式为activity的默认启动模式,来看看standard启动模式是怎样的
直接启动应用
Android——Activity四种启动模式_第2张图片

这是MainActivity,可以看到上面显示taskId以及当前activity的序列号
接下来我们点击按钮跳转到standardActivity
Android——Activity四种启动模式_第3张图片
可以看到当前的standardActivity的taskId为27291序列号为24fb2aeb
再次点击跳转按钮
Android——Activity四种启动模式_第4张图片
当前也是在StandardActivity界面,但是Activity的序列号已经变成28831b78说明这是一个新的实例,按下返回键回到了上一个StandardActivity即序列号为 24fb2aeb的StandardActivity,再按返回键返回到了MainActivity,至此我们应该明白了Standard模式就是每次都会重新实例化Activity而不会进行复用。

singleTop启动方式

在demon中添加一个singleTopActivity后启动应用

Android——Activity四种启动模式_第5张图片
点击跳转到single top Activity按钮
Android——Activity四种启动模式_第6张图片
可以看到当前singleTopActivity的序列号为29017251
再点击跳转到single top Activity按钮
Android——Activity四种启动模式_第7张图片
点击后发现当前singleTopActivity的序列号也是29017251说明是同一个实例(此时如果点击返回键就退到了MainActivity)我们点击跳转到main Activity按钮
Android——Activity四种启动模式_第8张图片
点击跳转到single Top Activity按钮
Android——Activity四种启动模式_第9张图片
此时singleTopActivity的序列号为301a5811而不是29017251即这是一个新的singleTopActivity实例
所以singleTop模式就是目标Activity已经在栈顶时(即最上层)则不重新创建实例而是直接复用,如果不在栈顶则会重新实例化

singleTask启动方式

同样的在demon中添加一个singleTaskActivity后启动应用

Android——Activity四种启动模式_第10张图片
点击跳转到single task Activity按钮
Android——Activity四种启动模式_第11张图片
此时singleTaskActivity的序列号为325c7c0a
我们再点击跳转到single task Activity按钮
Android——Activity四种启动模式_第12张图片

发现此时的序列号和点击之前的是一样的,即当前activity跟点击之前是同一实例
我们现在来点击跳转到main Activity按钮
Android——Activity四种启动模式_第13张图片
继续点击跳转到single task Activity按钮
Android——Activity四种启动模式_第14张图片
发现singleTaskActivity的序列号跟之前的还是一样的即是同一个实例,由此我们发现singleTask模式就是当目标activity在栈中有实例时则不重新创建实例而是直接复用之前的实例
注意:singleTaskActivity复用之前的实例是先将在其上的其他实例先出栈

singleInstance启动方式

singleInstace启动模式跟之前3种启动模式比较不一样,具体我们先来看一下
首先启动应用
Android——Activity四种启动模式_第15张图片
我们现在看一下当前的taskId为27383
接着点击跳转到single instance Activity按钮
Android——Activity四种启动模式_第16张图片
此时的taskId为27384说明当前这个activity跟之前的activity不在同一个栈中,而是在一个单独的栈中
我们继续点击跳转到single instance Activity按钮
Android——Activity四种启动模式_第17张图片
此时的taskId跟之前的是相同的,说明是在同一个栈里,序列号也是一样的说明是同一个实例
我们再点击跳转到main Activity按钮
Android——Activity四种启动模式_第18张图片
此时mainActivity的taskId跟之前是一样的,说明跟之前的Activity是在同一个栈中的,但是序列号不一样,这个是正常的因为mainActivity采用的是默认的启动模式(即standard模式)所以会重新实例化,由此我们可以知道被声明为singleInstance模式activity会被单独放在一个堆栈中,当需要启动的目标activity声明为singleInstance模式并且在系统中存在则会直接复用

说了这么多最后用自己的话来描述一下这四种启动模式吧,如果描述的不够准确或是有误的地方欢迎各位指出

standard模式 每次都会重新生成一个实例

singleTop模式 如果在栈顶有当前activity的实例则直接使用,否则重新生成一个实例

singleTask模式 如果在栈中有当前activity的实例则直接使用(如果有实例但不在栈顶则将其之上的实例出栈),否则重新生成一个实例

singleInstance模式 如果系统中有当前activity实例则直接使用,否则重新生成实例并放置在单独的栈中

至此已经介绍了Activity的四种启动模式
如果有不明白的地方可以留言。有写错或者不好的地方欢迎指正

更多相关文章

  1. 固定屏幕显示模式 ScreenOrientation
  2. Android发送短信方法实例详解
  3. Android 读取资源文件实例详解
  4. 解决Android编辑框在全屏模式下无法检测布局变化的问题
  5. 转:Android下文件操作模式(含SDCard的读写)
  6. android中和c++中生产者和消费者模式
  7. Android之SeekBar与RatingBar简单实例
  8. android修改进入工程模式
  9. Android与php服务器交互实例

随机推荐

  1. 常用函数类型和常用数据类型
  2. vue如何实现Json格式数据展示
  3. Nginx禁止ip访问或非法域名访问
  4. ClassList对象学习总结、表单事件非空验
  5. Python OpenCV形态学运算示例详解
  6. javascript-基础(五)
  7. classList对象、blur事件进行表单非空验
  8. 浅谈并发处理PHP进程间通信之System V IP
  9. 实例演示classList对象及表单非空验证
  10. 演示classList和表单非空验证