Activity启动模式

Activity启动模式
Task的概念:我们在打开手机应用时,点击右下方的方块或者通过全面屏手势,上滑+停住,可以查看最近使用的应用列表。我们会看到一块块的长方形块,就是一个个的Task。在桌面点击一个应用图标时,它的默认activity将被打开,就是配置了MAIN + LAUNCHER的intent-filter的activity。它在第一次启动的时候,系统会为它创建一个Task并将它放入该Task里面。我们在最近应用列表里切换应用,实际上是在多个Task之间切换。每个Task都有自己的回退栈,按照顺序记录打开的每个activity。在用户按返回键的时候(或者全面屏手势右滑),将按照倒序依次关闭这些Activity。直到当最后一个activity退出,Task的生命将结束。不过,即使Task销毁,它在最近任务列表里也不会消失。系统会保留它的一个残影,目的是让用户可以方面的进行切回。当然这种情况下的切回,实际上是activity的重新启动和Task的重建,原先的task已经不存在了。因此我们在最近应用列表里看到的App(实际是Task)未必是活着的。2、四种启动模式我们理解了Task的概念,再来详细看一下Activity的启动模式。首先我们需要知道的是Android的设计中Activity是组件。“组件”的意义,就是我们可以拿别人的组件来用,完成我们的功能,同时我们的组件也可以给别人来用。我们知道Activity是定义在App里,而“组件”的设计思想,又要Activity可以被“拿出去”使用。这也是Task存在的另一个意义:打破App的限制,以Task灵活的组装这些Activity,提高复用效率,实现丰富功能。当然每一个App都会创建自己的Task,多数情况下,App定义的Activity也都活动在自己的Task里。。我们说的LaucnhMode就是用来定义Activity启动时会进入Task的行为,不同的模式,会启动到不同的Task。2.1、Standard通常来说,从用户直觉上,从应用里打开一个Activity应当是和当前的App更加相关,而不是定义它的App。比如,我们从短信App里通过点击电话号码新建联系人,而打开了通讯录App的添加联系人Activity。那么我们直观认为添加联系人的逻辑应该是和短信更加相关。因为它就是从短信跳过来的,它们是在一个逻辑链条上。当我们按下返回键,希望看到的是跳转之前的短信App的界面。那么这里通讯录App的添加联系人Activity就是典型的Standard(默认)启动模式。这种模式就是被启动的Activity直接进入到当前Task的栈中,覆盖在栈顶的位置。在默认规则下,在不同Task打开相同Activity,这个Activity将会被创建多个实例,分别放进每一个Task中,互补干扰。Standard启动模式是Android