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

2024-06-19

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

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

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

  3. 假设意图通过任务中现有活动的 onNewIntent() 进行路由。它被发送到哪个活动?最靠近顶部的那个还是最靠近根部的那个?它是否总是被发送到应用程序启动活动的实例,或者有时会被发送到与根具有相同亲和力的活动?它是否可以被发送到与根不具有相同亲和力的活动?

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

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


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, from docs http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK:

使用此标志时,如果该活动的任务已在运行 您现在正在开始,那么新的活动将不会开始; 相反,当前任务将被简单地带到前面 屏幕显示其上次所处的状态。

onNewIntent 基础知识:

onNewIntent仅当活动已设置时才传递singleTask, singleInstance启动模式。如果活动已设置,也会传递singleTop启动模式或启动活动的意图已设置标志FLAG_ACTIVITY_SINGLE_TOP并且活动实例已经位于目标任务的顶部。这意味着尝试启动新的活动实例,而不是现有实例本身需要处理意图。

以下是对您的询问的答复:

是否总是发送新意图,或者结果有时与 从最近的任务中恢复任务?

如果任务已经在运行,则会将其置于前台。以防万一FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET标志用于启动一个活动,然后该任务被带到前台,然后该活动被终止。从docs http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET:

这对于您的逻辑中存在逻辑中断的情况很有用 应用。例如,电子邮件应用程序可能有一个命令 查看附件,这会启动要显示的图像查看活动 它。此活动应该是电子邮件应用程序任务的一部分, 因为它是用户参与的任务的一部分。但是,如果 用户离开该任务,然后从家里选择电子邮件应用程序, 我们可能希望他们返回到他们正在查看的对话,而不是 图片附件,因为这很令人困惑。通过设置这个标志 启动图像查看器时,该查看器及其任何活动 下次用户返回邮件时启动将被删除。

-

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

onCreate在创建新的活动实例时调用。onNewIntent如果已经存在活动实例并且不需要创建新实例(如以下情况),则调用singleInstance, singleTask并有条件地singleTop(如上所述)。

假设意图通过 onNewIntent() 进行路由 任务中现有的活动。它被发送到哪个活动?这 最接近顶部的一个还是最接近根部的一个?是否总会得到 发送到应用程序启动活动的实例还是可以 有时会被发送到与根具有相同亲和力的活动? 它是否可以被发送到不共享相同内容的活动 亲和力为根?

的情况下singleTask and singleInstance它必须是任务的根源。的情况下singleTop它必须是任务的首要活动。

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

我希望到目前为止提供的解释能够回答这个问题。

更新1:

这里是Launcher https://android.googlesource.com/platform/packages/apps/Launcher/+/master/src/com/android/launcher/Launcher.java将标志添加到意图的代码:

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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单击应用程序的启动图标时会发生什么? 的相关文章

  • Android - 如何以编程方式定义 ShapeDrawables?

    我想要实现的是使用内部有几个层的 Drawable 但在运行时控制一些值 例如渐变的 startColor 这是 my layered shape xml 中的内容
  • Android:删除整个数据库

    我想删除由我的应用程序创建的完整数据库 你知道有什么adb命令或者android语句可以做到这一点吗 您可以运行命令 adb s emulator 5554 shell or whatever port you use cd data da
  • 在自定义列表视图中,滚动时复选框未选中

    我知道这个问题已经被问了一遍又一遍 但我仍然找不到有用的建议 当我滚动列表视图时 复选框未选中 当特定项目时 我使用数组列表来存储列表视图中所选项目的 id 取消选中它将从列表视图中删除 public class ManagePractic
  • Android 和 Java Uuid

    我想为我的应用程序生成一个uuid 我尝试了很多东西 例如wifi mac地址 获取android id 序列号 从设备创建伪uuidandroid os Build特性 我还知道java本身有Uuid创建者类java util UUID
  • 如何编写带有回调的简单react-native本机模块

    如何以最简单的方式完成这项工作 我无法将回调发送到react native 可能我错过了一些东西 ReactMethod public void testCallback Callback cb String sampleText Java
  • 如何设置 MediaCodec 创建的编码器缓冲区大小

    我正在尝试使用 Nexus 来测试 Mediacodec API 的编码 我可以看到编码器提供的inputBuffers是119040 通过记录inputBuffers capacity 但帧的大小 即输入 是 460800 我收到错误消息
  • android java.lang.OutOfMemoryError 错误

    当我从网站下载大数据时 我收到以下错误信息 I global 20094 Default buffer size used in BufferedInputStream constructor It would be better to b
  • 更改Android TabWidget底部栏颜色

    如何更改 TabWidget 底部栏的颜色 我已经成功更改了选项卡背景颜色 但底部栏仍然是灰色 橙色 并且我在 Android 文档和源代码中找不到与此相关的任何信息 谢谢 See 启用 禁用此行 tabHost getTabWidget
  • 如何在 Android 中正确设置 google play 登录?

    我在安卓上开发了一个游戏 我尝试实现 GooglePlay SignIn 但显示错误 我无法调试此错误 我尝试在模拟器以外的不同手机型号中安装该应用程序 Code public void startSignInIntent startAct
  • 通过单击 imageView 打开活动

    我正在尝试做一个ImageView打开另一个活动 public class MainActivity extends Activity Override protected void onCreate Bundle savedInstanc
  • Android SQLite 查询被 Android Studio 标记为错误

    在我的一个 Android 应用程序中 我使用了一些SQLite自从我更新到以来开始出现问题的查询Android Studio 3 0 尽管我可以编译并运行该应用程序 但它们被标记为错误 这些是查询 db execSQL INSERT IN
  • AsyncTask加载图像RecyclerView

    我正在尝试创建一个与该应用程序类似的应用程序 一个在回收视图中包含一些图像和描述 卡片视图 的应用程序 https lh5 ggpht com At pHbZqdzlgmAqY0jbiztDYIAts1wOYWGTOHibmFHuq8CFA
  • Geo Fix 在 Android SDK 2.2 中不起作用

    我正在尝试测试 Android 应用程序 我需要发送模拟位置来测试这一点 我已经注册了 requestlocation update 方法 如下 locationManager requestLocationUpdates bestProv
  • Android 开发工具无法通过 adb 识别 Asus Nexus 7

    问题 正确安装和连接后 adb 无法识别 Asus Nexus 7 设置 华硕 Nexus 7 平板电脑 Windows 7 64 位操作系统 采取的步骤 安装64位Java JDK http www oracle com technetw
  • Android Path addArc 在canvas中两点之间

    我正在尝试在 android 中绘制弧线 在IOS中 用这个方法确实很简单 path addArcWithCenter radius startAngle endAngle clockwise 在android中 我有3个点 我的圆的中心
  • 如何获取viewPager选中的Tab?

    我使用 lib viewpagerindicator 创建了一个 viewpager 该活动扩展了 FragmentActivity 因此我在获取选择哪个选项卡时遇到问题 我的适配器由下面的代码给出 class GoogleMusicAda
  • PopupWindow 在 Android API 28 的自定义键盘上被剪切

    我做了一个定制键盘 当您长按某个键时 会出现PopupWindow在按键上方显示一些额外的选项 问题在于 在 API 28 中 此弹出窗口被剪切 甚至顶行完全隐藏 我已经为 API with https stackoverflow com
  • JSON 解析为 Java - Android 应用程序

    我需要在 Java Android 应用程序中解析 json 字符串的帮助 JSON 文件的文本 data columns location id name description latitude longitude error type
  • 刷新 ArrayAdapter onResume [notifyDataSetChanged() 不起作用]

    我正在使用片段创建一个联系人列表应用程序 其中一个片段是联系人列表中的姓名列表 另一个是其余详细信息 这是显示名称列表的类 public class MyListFragment extends ListFragment private C
  • 当用户从android后台删除应用程序时如何检测事件?

    当用户从后台删除我的应用程序时 我需要重置通知 所以我需要一个从后台删除应用程序的事件 请帮帮我 建议表示赞赏 谢谢 亲切的问候 官方安卓文档 Activity onDestroy 您的活动被销毁之前收到的最后一个电话 发生这种情况的原因可

随机推荐

  • 简化 CSS 代码

    我怎样才能简化这段代码 user panel subscribe user panel faves user panel tags user panel title user panel calendar a user panel item
  • Cloud9 IDE 本地主题

    Cloud9 IDE 文档说您可以导入 Textmate 主题 但我不明白 有人可以逐步解释我如何做到这一点吗 顺便说一句 我正在尝试将主题包含在我的本地主机上 我找到了这个链接 但我还是不明白 https groups google co
  • 在 C# 中向下转换对象列表

    如何向下转换对象列表 以便列表中的每个对象都向下转换为派生类的对象 这就是场景 我有一个基类List基本项 以及从它继承的两个类 public class BaseClass public List
  • 如果不使用 Promise 对象的 then 方法,是否不可能从 Promise 对象获取 [[PromiseValue]] ? [复制]

    这个问题在这里已经有答案了 该问题旨在成为规范的问题 答案 看什么是规范问题 答案 其目的是什么 https meta stackoverflow com q 291992 这里没有明确的答案 我在此发布问题 以代替之前提出和回答的问题 如
  • TransactionFlow(TransactionFlowOption.Mandatory) 操作行为(TransactionScopeRequired = true

    我正在尝试了解 WCF 事务 但对一个概念感到困惑 行为上有什么不同 TransactionFlow TransactionFlowOption Mandatory and OperationBehavior TransactionScop
  • jquery 更改事件和 aurelia 的技术

    我需要找到一个可靠的解决方案来使这两个框架很好地发挥作用 使用materialize css 他们的选择元素使用jquery来应用值更改 然而 这并没有触发奥里莉亚看到变化 使用 的技术 select change eventObject
  • 在 Intellij-Idea 调试器中转储一个巨大的数组

    Idea 有没有办法将一个非常大的整数数组的内容转储到剪贴板中 数组上的 复制值 不返回任何内容 要使用复制值获取剪贴板中的值 您需要定义一个 Java 数据类型渲染器 来解释数组的内容 右键单击您的数组变量 选择 查看为 gt 创建 在
  • 强制 IDataErrorInfo 验证

    我在某个面板上有两个控件 文本框和组合框
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 从排列生成器中随机选择?

    如何随机挑选所有结果 一一 不重复 itertools permutations k 或者这个 如何构建随机排列生成器 就像是shuffle permutations k 我正在使用Python 2 6 Yeah shuffle r 可以使
  • SQL 中基于下一条记录和上一条记录的复杂排序

    这是一个后续问题根据 SQL 中的下一条记录和上一条记录进行排序 https stackoverflow com questions 30477803 sorting based on next and previous records i
  • 有什么方法可以让dispatch_queue_t在单线程中工作吗?

    这是我的代码 interface MyObject property nonatomic dispatch queue t queue end implementation MyObject NSThread check id init s
  • Jquery Flipbook 上传 PDF

    我正在使用Builtbywill Flipbook div div title This is a page title img src image1 jpg div div img src image2 jpg div div title
  • 将值替换为其各自列的名称

    我有一个数据框 Code 401k CVS 101A true 231N true FD54 true 99JB 85F4 true 我试图用相应的列名称 例如 401k 替换 true 字符值 这是我想要的输出 Code 401k CVS
  • 包管理器控制台中缺少文件错误

    我们的开发团队的一些成员在打开包管理器控制台时开始看到以下错误 它完全阻止我们运行实体框架命令 我们已经检查过并且提到的文件确实存在 GetEvent types ps1xml Diagnostics Format ps1xml Diagn
  • 设置一个带有 JQuery 掩码的文本字段

    使用 watir webdriver 我尝试设置文本字段的值 browser text field id phoneNumbers value input set 5555551234 当我运行该命令时 我可以看到 watir 找到了该字段
  • 可以创建一个独立的方法/函数(没有任何类)

    我正在尝试理解闲聊 是否可以有一个独立的方法 函数 它不属于任何特定类 并且可以稍后调用 amethod amethod called printNl amethod 上面的代码给出以下错误 simpleclass st 1 expecte
  • Typescript 和 React:在组件之间传递 props 与默认 props

    我对 Typescript 和使用 Typescript 创建 React 应用程序相当陌生 我在将道具从一个组件传递到另一个组件时遇到了一些麻烦 我在下面提供了一个示例 我的问题是围绕组件的默认道具 当我在父组件中调用子组件时 出现错误
  • 如何根据特定条件触发电子邮件以在 Jenkins 中成功构建

    每当某个条件在构建后步骤的执行 shell 中成立时成功的构建 我想触发电子邮件发送 问题是 即使条件不成立 构建也会被视为success 我正在尝试实现的内容 if condition true then
  • 单击应用程序的启动图标时会发生什么?

    单击应用程序的启动图标时会发生什么 是否总是发送新意图 或者结果有时与从最近的任务恢复任务相同 如果发送意图 它何时被发送到新活动实例的 onCreate 方法以及何时通过现有活动的 onNewIntent 进行路由 假设意图通过任务中现有