点击应用的启动图标后会发生什么?
是否始终发送新意图,或者结果有时与从最近任务中恢复任务相同?
如果发送了intent,它何时被发送到新活动实例的onCreate()方法,何时通过现有活动的onNewIntent()进行路由?
让我们假设意图通过任务中现有活动的onNewIntent()进行路由。它被发送到哪个活动?最靠近顶部的那个或最靠近根的那个?它是否总是被发送到应用程序的启动活动的实例,或者它有时会被发送到与根目录具有相同亲和力的活动吗?它是否可以被发送到与根不具有相同亲和力的活动?
最后,这一切如何受到任务活动的各种启动模式(标准,单顶,单实例,单一任务)的影响?
如果有人了解这一切,请帮助我!
答案 0 :(得分:11)
What happens when you click on an app's launch icon?
Launcher应用程序使用intent [action = Intent.ACTION_MAIN,category = Intent.CATEGORY_LAUNCHER和flag = Intent.FLAG_ACTIVITY_NEW_TASK]调用startActivity
。
关于Intent.FLAG_ACTIVITY_NEW_TASK
,来自docs:
使用此标志时,如果某个任务已在运行该活动 你现在开始,然后一个新的活动将不会开始; 相反,当前的任务将被简单地带到前面 屏幕显示它最后的状态。
onNewIntent基础知识:
仅当活动设置onNewIntent
,singleTask
启动模式时, singleInstance
才会发送。如果活动已设置singleTop
启动模式或启动活动的意图已设置标志FLAG_ACTIVITY_SINGLE_TOP
且活动实例已位于目标任务的顶部,则也会传递它。这意味着尝试启动一个新的活动实例,而现有实例本身需要处理意图。
以下是对您的查询的回复:
是否始终发送新意图,或者结果有时与结果相同 从最近的任务中恢复任务?
如果任务已在运行,则将其置于前台。如果FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
标志用于启动活动,后者将任务带到前台,则活动将被终止。来自docs:
这适用于您的逻辑中断的情况 应用。例如,电子邮件应用程序可能有一个命令 查看附件,该附件启动要显示的图像视图活动 它。此活动应该是电子邮件应用程序任务的一部分, 因为它是用户参与的任务的一部分。但是,如果 用户离开该任务,然后从家中选择电子邮件应用程序, 我们可能希望他们回到他们正在观看的对话,而不是 图片附件,因为这是令人困惑的。通过设置此标志 启动图像查看器时,该查看器及其任何活动 下次用户返回邮件时,将删除启动。
-
在创建新的活动实例时调用如果发送了intent,它何时被发送到onCreate()方法 一个新的活动实例,以及它何时被路由通过 现有活动的onNewIntent()?
onCreate
。如果已存在活动实例并且不需要创建新实例,则会调用onNewIntent
,例如singleInstance
,singleTask
和有条件singleTop
(如上所述)。
让我们假设意图通过onNewIntent()来路由 任务中的现有活动。它被发送到哪个活动?该 最靠近顶部的一个或最靠近根的一个?它会永远得到吗? 发送到应用程序的启动活动的实例或者它可以 有时会发送到与root具有相同亲和力的活动? 它是否可以被发送到不共享相同的活动 亲和力作为根?
如果是singleTask
和singleInstance
,则必须是任务的根。在singleTop
的情况下,它必须是任务的最高活动。
最后,这些都受各种发射模式的影响 (标准,单顶,单实例,单任务)的活动 在任务中?
我希望到现在为止提供解释,然后回答。
更新1:
以下是Launcher代码,它将标志添加到intent:
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);
}
答案 1 :(得分:0)
您最好的选择是阅读开发者文档:http://developer.android.com/training/basics/activity-lifecycle/index.html
第一课(http://developer.android.com/images/training/basics/basic-lifecycle.png)中有一个流程图,它提供了Android活动生命周期的出色图形表示。