Pau*_*ton 12 android android-activity android-task
单击应用程序的启动图标会发生什么?
是否始终发送新意图,或者结果有时与从最近任务恢复任务相同?
如果发送了intent,它何时被发送到新活动实例的onCreate()方法,何时通过现有活动的onNewIntent()进行路由?
让我们假设意图通过任务中现有活动的onNewIntent()进行路由.它被发送到哪个活动?最靠近顶部的那个或最靠近根的那个?它是否总是被发送到应用程序的启动活动的实例,或者它有时会被发送到与根目录具有相同亲和力的活动吗?它是否可以被发送到与根不具有相同亲和力的活动?
最后,这一切是如何受到任务中各种活动的各种启动模式(标准,单顶,单实例,单一任务)的影响?
如果有人知道这一切,请帮助我!
Man*_*ani 12
What happens when you click on an app's launch icon?
Run Code Online (Sandbox Code Playgroud)
Launcher应用程序调用startActivityintent [action = Intent.ACTION_MAIN,category = Intent.CATEGORY_LAUNCHER and flag = Intent.FLAG_ACTIVITY_NEW_TASK].
关于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()进行路由.它被发送到哪个活动?最靠近顶部的那个或最靠近根的那个?它是否总是被发送到应用程序的启动活动的实例,或者它有时会被发送到与根目录具有相同亲和力的活动吗?它是否可以被发送到与根不具有相同亲和力的活动?
如果是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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4610 次 |
| 最近记录: |