gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:41:56 24 4
gpt4 key购买 nike

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

  1. 是否总是发送新的 Intent ,或者结果有时与从最近的任务恢复任务相同?

  2. 如果发送了一个 Intent,它何时被发送到新 Activity 实例的 onCreate() 方法以及何时通过现有 Activity 的 onNewIntent() 进行路由?

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

  4. 最后,任务中 Activity 的各种启动模式(标准、单顶、单实例、单任务)如何影响这一切?

如果有人明白这一切,请帮助我!

最佳答案

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

启动器应用调用 startActivity 并带有 Intent [action = Intent.ACTION_MAIN, category = Intent.CATEGORY_LAUNCHER and flag = Intent.FLAG_ACTIVITY_NEW_TASK]。

关于 Intent.FLAG_ACTIVITY_NEW_TASK,来自 docs :

When using this flag, if a task is already running for the activity you are now starting, then a new activity will not be started; instead, the current task will simply be brought to the front of the screen with the state it was last in.

NewIntent 基础知识:

onNewIntent 仅在 Activity 设置了 singleTasksingleInstance 启动模式时才会交付。如果 Activity 已设置 singleTop 启动模式或启动 Activity 的 Intent 已设置标志 FLAG_ACTIVITY_SINGLE_TOP 并且 Activity 实例已位于目标任务的顶部,它也会被交付.这意味着尝试启动一个新的 Activity 实例,而不是现有实例本身需要处理 Intent 。

以下是对您的查询的回复:

Is a new intent always sent, or is the result sometimes the same as resuming a task from recent tasks?

如果任务已经在运行,它会被带到前台。如果 FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET 标志用于启动 Activity ,后来任务被带到前台,则 Activity 被终止。来自 docs :

This is useful for cases where you have a logical break in your application. For example, an e-mail application may have a command to view an attachment, which launches an image view activity to display it. This activity should be part of the e-mail application's task, since it is a part of the task the user is involved in. However, if the user leaves that task, and later selects the e-mail app from home, we may like them to return to the conversation they were viewing, not the picture attachment, since that is confusing. By setting this flag when launching the image viewer, that viewer and any activities it starts will be removed the next time the user returns to mail.

-

If an intent is sent, when does it get sent to the onCreate() method of a new activity instance and when does it get routed through onNewIntent() of an existing activity?

onCreate 在创建新的 Activity 实例时被调用。 onNewIntent 如果已经存在一个 Activity 实例并且不需要创建新实例,如 singleInstancesingleTask 和有条件的 singleTop(如上所述)。

Let's suppose the intent gets routed through onNewIntent() of an existing activity in the task. Which activity does it get sent to? The one nearest the top or the one nearest the root? Will it always get sent to an instance of the application's launch activity or can it sometimes get sent to an activity with the same affinity as the root? Can it ever get sent to an activity which does not share the same affinity as the root?

singleTasksingleInstance 的情况下,它必须是任务的根。在 singleTop 的情况下,它必须是任务的顶级 Activity 。

Finally, how is this all affected by the various launch modes (standard, single top, single instance, single task) of the activities in the task?

我希望到目前为止提供的解释能够回答它。

更新 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);
}

关于android - 单击应用程序的启动图标时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25594924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com