Android Activity集成开发环境包括许多新的和改进的用于提高工作效率的功能。IDE 还进行了重新设计,从而向开发人员提供对.NET Framework 组件的直接访问,大大减轻了开发人员的工作压力。
只有最开始的activity显示出来。这样做的原因是:当用户很长时间以后回来的时候,它倾向于重新开始工作,而不是接着上次的工作做。当然,这是默认的模式。activity有一些属性可以控制请空的动作。当任务的根acitvity的此属性设置为 "true" 的时候。
无论用户何时返回应用程序,程序都会请空队列。从另一个角度说,这个属性和alwaysRetainTaskState属性完全相反。即使离开一会,用户也会被导航到初始状态。这个属性有些像clearTaskOnLaunch, 但是它是针对某个activity而非整个任务的。它可以清除任何Android Activity,当然包括任务堆栈的根activity。
当此属性设置为"true" 的时候,此activity只在用户当前会话中显示,当用户离开再回来的时候,此activity已经被清除。有另外一种方式来请空任务。如果intent含有 FLAG_ACTIVITY_CLEAR_TOP 节点,并且目标任务已经有一个指定activity的实例来处理这个intent了。
那么这个activity顶上的节点将被全部清除,这个activity的实例就位于任务堆栈的顶部了。如果指定的activity设置为"standard",。它将从任务中移除,建立一个新的实例来响应此intent。因为启动模式设置为 "standard"的时候,会建立一个新的实例来响应intent。
FLAG_ACTIVITY_CLEAR_TOP 经常和FLAG_ACTIVITY_NEW_TASK.一起使用。当他们一起使用的时候,可以定位到另外一个任务中已经存在的activity上,使得这个acitivity响应intent。
怎样把一个activity设置为整个任务的入口呢?可以设置一个intent filter: "android.intent.action.MAIN" 作为默认动作;"android.intent.category.LAUNCHER" 作为类别。(是 Intent Filters 章节的例子)。这种类型的的filter对应的Android Activity的icon和label显示在任务中,这样用户可以方便的回到任务
第二个能力尤其重要,用户必须可以离开任务,并且重返任务。因此, "singleTask" 和 "singleInstance"这2个启动模式必须用在含有 MAIN 和 LAUNCHER filter的activity中。想象一下,如果不加这2个filter会怎样?一个intent请求"singleTask" 的activity,初始化了一个新的任务,用户操作了一会这个任务。
然后用户点击“HOME”键。现在这个任务就被HOME窗体覆盖了。但是因为这个任务不能在application launcher(注:类似于进程管理器)里面看到,因此用户没有办法打开它
CTIVITY_NEW_TASK 标志也有同样的问题。这个标志将使得activity在一个新的任务执行,当用户点击HOME 键离开任务的时候,必须能让用户回到这个任务。其他的一些机制(如通知管理器)经常在外部的任务开启某个activity,而不是activity所在的任务本身,因此必须在intent触发 startActivity()方法时使用FLAG_ACTIVITY_NEW_TASK 标记。
如果你有一个可以使用这个标记并且可以被外部调用的activity,要注意使得用户可以重新回到这个任务。当你不想用户重新回到任务的时候,将 <activity> 节点的finishOnTaskLaunch 设置为"true". 请参见前面的 Clearing the stack。
【编辑推荐】