Android 启动任务

当一个activity 被指定一个“android.intent.action.MAIN”做为动作,以及“android.intent.category.LAUNCHER”做为类别的intent 过滤器之后(在前述intent 过滤器一节中已经有了这个示例),它就被设置为一个任务的入口点。

这样的过滤器设置会在应用程序加载器中为此activity 显示一个图标和标签,以供用户加载任务或加载之后在任意时间回到这个任务。

第二个能力相当重要:用户必须可以离开一个任务,并在一段时间后返回它。

出于这个考虑,加载模式被设定为“singleTask”和“singleInstance”的activity 总是会初始化一个新任务,这样的activity 仅能用于指定了一个MAIN 和LAUNCHER 过滤器的情况之下。我们来举例说明如果没指定过滤器的情况下会发生的事情:一个intent 加载了一个“singleTask”的activity,初始化了一个新任务,用户在这个任务中花费了一些时间来完成工作。然后用户按下了HOME 键。于是任务被要求转至后台并被主屏幕所掩盖。

因为它并没有在应用程序加载器中显示图标,这将导致用户无法再返回它。

类似的困境也可由FLAG_ACTIVITY_NEW_TASK 标记引起。如果此标记使一个activity 启动了一个新任务继而用户按下了HOME 键离开了它,则用户必须要有一些方法再次回到这个任务。

一些实体(诸如通知管理器)总是在另外的任务中启动新activity,而不是做为它们自己的一部分,所以它们总是将FLAG_ACTIVITY_NEW_TASK 标记包含在intent 里面并传递给startActivity()。

如果你写了一个能被外部实体使用这个标记调用的activity,你必须注意要给用户留一个返回这个被外部实体启动的任务的方法。

当你不想让用户再次返回一个activity 的情况下,可以将 元素的finishOnTaskLaunch 设置为“true”。