Android Activity启动模式与Task理解

最近查看了下Activity启动模式和Task概念,发现原来自己理解的有些不太对,今天统一记录下,免得以后再网上到处找。其实把下面参考的三篇文章看完就明白了,我这里简单记录下一些要点。

一、Activity的启动模式是在AndroidManifest.xml配置<activity>的android:launchModel属性的,一共有四种启动模式可配置:

standard:不管有没有已经存在的实例,都生成新的实例,也是默认的启动模式。

singleTop:如果发现有对应的Activity实例正好位于栈顶,则重复利用,不再生成新的实例。

singleTask:如果发现栈中有对应的Activity实例,则使此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示到幕前。

singleInstance:会启用一个新的栈结构,将Activity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。

二、Activity栈

当用户在App中,从一个Activity跳到另一个时,Android系统会保存一个用户访问Activity的线性导航历史,这就是Activity栈,也被成为返回栈。一般来说,当用户运行一个新的Activity,这个Activity就会被加到Activity栈里面。因此,当用户按BACK键的时候,栈中的上一个Activity就会被展示出来。用户可以一直按BACK键直到回到主屏幕。

三、Task

Task可以理解为实现一个功能而负责管理所有用到的Activity实例的栈。

举一个例子来直观的体现:重启手机,长按Home键,发现弹出的最近任务中一个任务也没有,然后开启A应用,长按Home键,会发现有一个A应用的任务,查看手机进程,应该还没有B进程的。在A应用的A组件中调用B应用的B组件,此时看手机的进程,除了A进程外,还有一个B进程,但是长按Home键,能看到的还是只有一个A应用的任务。其实这个时候,B应用已经跑起来了,但是对用户来说,他其实没有开启过B应用,所有Task任务自始至终都是从用户的角度出发而设计的概念,保证用户的调用逻辑。

一个Task就是用户体验上的一个“应用”。

一个Task是用户可以完成一个特定目标的一组Activity,与Activity属于哪个App无关。除非明确的新建一个Task,用户启动的所有Activity都默认是当前Task的一部分。需要注意的是,这些Activity可能属于任何一个App、属于同一个App或者属于不同的App,这就是说一个Task可以是,从联系人列表开始,然后选择一个邮箱地址(通过电邮Activity),然后附加一个照片(通过图片Activity)。联系人、邮箱和图片这些都存在于不同的Activity中。启动Task的Activity被称作根Activity。通常,Task是从应用管理器、主屏后者最近Task(长按HOME)开始的。用户可以点击根Activity回到Task中去,就像启动这个Activity一样。在这个Task中,BACK键可以回到这个Task的前一个Activity里。Activity栈可以由一个或多个Task组成。

参考:http://blog.csdn.net/crazycharming/article/details/7070351

http://blog.csdn.net/guomeijuan916/article/details/7935154

http://www.cnblogs.com/ghj1976/archive/2011/04/29/2032412.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值