点击应用程序的启动图标时会发生什么?

当你点击一个应用程序的启动图标时会发生什么?

  1. 总是发送一个新的意图,或者是有时候像从最近的任务中恢复任务一样?

  2. 如果意图被发送,它何时被发送到新的活动实例的onCreate()方法,什么时候通过现有活动的onNewIntent()路由?

  3. 假设意图通过任务中现有活动的onNewIntent()路由。 它发送到哪个活动? 最靠近顶部还是最靠近根部的那个? 它会始终被发送到应用程序启动活动的实例,还是有时会被发送到与根相同的活动? 它能否被发送到与根不相同的活动?

  4. 最后,这一切又是如何受到各项活动的启动模式(标准,单顶,单实例,单任务)的影响?

如果有谁了解这一切,请帮助我!

Solutions Collecting From Web of "点击应用程序的启动图标时会发生什么?"

 What happens when you click on an app's launch icon? 

启动程序应用程序使用意图调用startActivity [action = Intent.ACTION_MAIN,category = Intent.CATEGORY_LAUNCHER和flag = Intent.FLAG_ACTIVITY_NEW_TASK]。

关于Intent.FLAG_ACTIVITY_NEW_TASK ,来自文档 :

当使用这个标志时,如果一个任务已经开始执行,那么新的活动将不会开始。 取而代之的是,当前的任务将被简单地带到屏幕的最前面的状态。

onNewIntent基础知识:

onNewIntent仅在活动设置了singleTasksingleInstance启动模式onNewIntent被传递。 如果activity已经设置了singleTop启动模式,或者启动活动的意图已经设置了标志FLAG_ACTIVITY_SINGLE_TOP ,并且活动实例已经在目标任务的顶部,那么它也被传递。 这意味着尝试启动一个新的活动实例,而现有的实例本身需要处理这个意图。

以下是对您查询的回复:

总是发送一个新的意图,或者是有时候像从最近的任务中恢复任务一样?

如果任务已经在运行,那么它会被带到前台。 如果使用FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET标志来启动一个活动,而后者将该任务带到前台,则该活动被终止。 从文档 :

这对于在应用程序中有逻辑中断的情况非常有用。 例如,电子邮件应用程序可能有查看附件的命令,该附件启动图像查看活动以显示该附件。 此活动应该是电子邮件应用程序任务的一部分,因为它是用户参与的任务的一部分。但是,如果用户离开该任务,并稍后从家中select电子邮件应用程序,则可能会喜欢他们回到他们正在观看的对话,而不是图片的附件,因为这是混乱。 通过在启动图像查看器时设置此标志,在下次用户返回邮件时,该查看器及其启动的任何活动都将被删除。

如果意图被发送,它何时被发送到新的活动实例的onCreate()方法,什么时候通过现有活动的onNewIntent()路由?

在创build活动的新实例时调用onCreate 。 如果已经存在活动实例并且不需要创build新实例,则singleTask ,例如singleInstancesingleTask和有条件的singleTop (如上所述)。

假设意图通过任务中现有活动的onNewIntent()路由。 它发送到哪个活动? 最靠近顶部还是最靠近根部的那个? 它会始终被发送到应用程序启动活动的实例,还是有时会被发送到与根相同的活动? 它能否被发送到与根不相同的活动?

singleTasksingleInstance情况下,它必须是任务的根。 在singleTop顶的情况下,它必须是任务的最高活动。

最后,这一切又是如何受到各项活动的启动模式(标准,单顶,单实例,单任务)的影响?

我希望直到现在的解释,回答。

更新1:

下面是将标志添加到意图的启动器代码:

 void processShortcut(Intent intent) { .... Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); .... } void startActivitySafely(Intent intent) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ... startActivity(intent); } 

您最好的select是阅读这里的开发人员文档: http : //developer.android.com/training/basics/activity-lifecycle/index.html

第一课有一个stream程图( http://img.androidcookie.com/android/basic-lifecycle.png ),它提供了Android活动生命周期的优秀graphics表示。