Activity启动模式_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > Activity启动模式

Activity启动模式

 2015/2/27 18:49:36  君子乐道  程序员俱乐部  我要评论(0)
  • 摘要:参考文章:http://developer.android.com/guide/topics/manifest/activity-element.html#lmodehttp://www.cnblogs.com/hnrainll/archive/2012/12/18/2823064.htmlActivity有四种启动模式,分别为:standard、singleTop、singleTask、singleInstance。要弄懂它们,先看看Application、ActivityStack
  • 标签:模式 启动 Activity

参考文章:

http://developer.android.com/guide/topics/manifest/activity-element.html#lmodehttp://www.cnblogs.com/hnrainll/archive/2012/12/18/2823064.html 

Activity有四种启动模式,分别为:standard、singleTop、singleTask、singleInstance。要弄懂它们,先看看Application、Activity Stack、Task的概念。

一、Application、Activity Stack、Task

  1、Application就是一个应用程序(apk)。

  2、Activity Stack,即Activity栈,遵循先进后出原则,系统只显示栈顶的Activity。

  3、Task,将多个Activity组合在一起,这些Activity可以属于不同的Application。

二、launchMode - 启动模式

  官方资料的介绍:launchMode用于指示activity启动的方式。在activity启动的时候由Intent里的flags(FLAG_ACTIVITY_*常量)决定。默认为standard。

  这四种启动模式被分为了两派,standard和singleTop一派,singleTask和singleInstance一派。standard和singleTop启动的Activity可以有多个实例,这些实例可以从属于任何task,可以存在于activity stack的任何位置。在task中启动使用standard和singleTop模式的activity的典型用法是startActivity()。若Intent对象含有class="s1">FLAG_ACTIVITY_NEW_TASK声明,则会启动一个新的task,详情请看taskAffinity属性。

   singleTask和singleInstance用一个新的task启动activity。启动的activity总是在activity stack的最底部。并且,系统只能保持该activity的一个实例对象,即只能有一个task。

   standard和singleTop模式之间的唯一区别是:每当有新的intent试图启动standard activity,都要创建一个新的activity实例来响应该intent,每个activity实例都持有一个intent对象。同样的,当有新的intent对象来启动singleTop activity,也会创建新的activity实例来处理该intent。但是,如果task中有了试图启动的activity实例,并且在栈顶,activity会接收到该intent(使用onNewIntent()方法);不会创建新的实例。其他情况,如,task中存在singleTop activity,但是不在栈顶,或者不是在目标栈的栈顶,会在stack中创建新的实例。

  同样的,点击返回键,如何反应取决于父界面的启动模式。如果parent activity是singleTop(或者intent含有FLAG_ACTIVITY_CLEAR_TOP flag),则parent activity将会被移到栈顶。navigation intent将会被parent activity的onNewIntent()方法接收。若parent activity的启动模式是standard(并且intent中没有FLAG_ACTIVITY_CLEAR_TOP flag),当前activity和其parent activity将被移除所在stack,然后创建一个新的parent activity来接收navigation intent。

  singleTask和singleInstance模式之间的唯一区别是:singleTask activity总是在task的底部,且允许其他的activity加入其所在的task。singleInstance activity,相反的,不允许其他的activity加入其task,它是task中唯一的activity,若启动其他的activity,将会在不同的task中启动,就好像使用intent传递了FLAG_ACTIVITY_NEW_TASK flag一样。

 

Use Cases Launch Mode Multiple Instances? Comments 许多activity的普通启动方式 standard yes 缺省的。系统在task中总是以该方式创建activity并将intent对象传递给它。 singleTop 视情况而定 目标task中存在activity的实例,系统通过onNewIntent()方法传递intent对象,而不是创建新的实例。

Specialized launches(not recommended for general use)

singleTask no 在新的task的底部创建activity实例并传递intent。然而,如果该activity已经存在了一个实例,系统将通过onNewIntent()传递intent对象,而不是创建新的实例。 singleInstance no 与singleTask相同,除了系统不会在activity所在task中运行其他activity。该activity是所在task中的唯一activity实例。

稍后写个代码测试下,再来更新。

上一篇: 微软东莞工厂关停 已启动设备拆卸及员工补偿 下一篇: 没有下一篇了!
发表评论
用户名: 匿名