原文地址: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启动模式

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

standard启动模式为activity的默认启动模式,来看看standard启动模式是怎样的
直接启动应用

这是MainActivity,可以看到上面显示taskId以及当前activity的序列号
接下来我们点击按钮跳转到standardActivity

可以看到当前的standardActivity的taskId为27291序列号为24fb2aeb
再次点击跳转按钮

当前也是在StandardActivity界面,但是Activity的序列号已经变成28831b78说明这是一个新的实例,按下返回键回到了上一个StandardActivity即序列号为 24fb2aeb的StandardActivity,再按返回键返回到了MainActivity,至此我们应该明白了Standard模式就是每次都会重新实例化Activity而不会进行复用。

singleTop启动方式

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


点击跳转到single top Activity按钮

可以看到当前singleTopActivity的序列号为29017251
再点击跳转到single top Activity按钮

点击后发现当前singleTopActivity的序列号也是29017251说明是同一个实例(此时如果点击返回键就退到了MainActivity)我们点击跳转到main Activity按钮

点击跳转到single Top Activity按钮

此时singleTopActivity的序列号为301a5811而不是29017251即这是一个新的singleTopActivity实例
所以singleTop模式就是目标Activity已经在栈顶时(即最上层)则不重新创建实例而是直接复用,如果不在栈顶则会重新实例化

singleTask启动方式

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


点击跳转到single task Activity按钮

此时singleTaskActivity的序列号为325c7c0a
我们再点击跳转到single task Activity按钮

发现此时的序列号和点击之前的是一样的,即当前activity跟点击之前是同一实例
我们现在来点击跳转到main Activity按钮

继续点击跳转到single task Activity按钮

发现singleTaskActivity的序列号跟之前的还是一样的即是同一个实例,由此我们发现singleTask模式就是当目标activity在栈中有实例时则不重新创建实例而是直接复用之前的实例
注意:singleTaskActivity复用之前的实例是先将在其上的其他实例先出栈

singleInstance启动方式

singleInstace启动模式跟之前3种启动模式比较不一样,具体我们先来看一下
首先启动应用

我们现在看一下当前的taskId为27383
接着点击跳转到single instance Activity按钮

此时的taskId为27384说明当前这个activity跟之前的activity不在同一个栈中,而是在一个单独的栈中
我们继续点击跳转到single instance Activity按钮

此时的taskId跟之前的是相同的,说明是在同一个栈里,序列号也是一样的说明是同一个实例
我们再点击跳转到main Activity按钮

此时mainActivity的taskId跟之前是一样的,说明跟之前的Activity是在同一个栈中的,但是序列号不一样,这个是正常的因为mainActivity采用的是默认的启动模式(即standard模式)所以会重新实例化,由此我们可以知道被声明为singleInstance模式activity会被单独放在一个堆栈中,当需要启动的目标activity声明为singleInstance模式并且在系统中存在则会直接复用

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

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

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

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

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

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

更多相关文章

  1. 修复Android(安卓)App在开机后入口类被启动两次的bug
  2. Android布局(序章)
  3. android 命令(adb shell)进入指定模拟器或设备
  4. Android(安卓)开机自启动程序
  5. Android(安卓)ASE 脚本环境
  6. 你真的了解你手机的状态栏吗?
  7. Android(安卓)启动过程
  8. Android(安卓)启动过程(2)
  9. Android开机启动分析(一)logo的显示

随机推荐

  1. Android(Java):jni学习
  2. 保持应用程序界面不随手机转动而转动 解
  3. Android开发问题记录
  4. android shape标签的使用
  5. android Timber日志打印
  6. Android(安卓)Studio使用中的小常识
  7. Android(安卓)WIFI 架构和控制流程
  8. android httpclient 管理cookie
  9. Android之利用android:indeterminateDraw
  10. android - JNI接口函数 (3)