从 Android 应用程序安装程序和主屏幕启动应用程序时出现活动堆栈排序问题

2023-11-21

仅出于测试目的,我允许通过 URL 下载和安装我的应用程序 APK。一旦下载到手机上,它就可以通过 Android 应用程序安装程序启动,用户可以选择将其安装到设备上然后运行。

考虑一下我们是否以上述方式下载并运行应用程序。我的应用程序中的主要/启动器活动是登录页面(Activity A)。一旦用户通过身份验证,他们就会被带到应用程序的主要区域,例如Activity B。所以现在这个任务的当前活动堆栈是A > B.

然后我按下手机上的主页按钮,进入 Android 主屏幕。我通过菜单中的图标重新启动我的应用程序,然后我被带到Activity A, 代替Activity B。活动堆栈现在是A > B > A,或者现在有两个带有活动堆栈的独立任务A > B, and A分别。我想要的是被带回到Activity B当我重新启动应用程序时。在这种状态下按回键将使我回到Activity B.

仅当我首先通过安装程序打开应用程序时才会发生这种不良行为,而不是通过主屏幕/菜单打开应用程序时才会发生。

我研究了每个机制如何启动活动。当我们使用应用程序安装程序时,我们会看到以下日志:

INFO/ActivityManager(XXXX): Starting activity: Intent { dat=file:///mnt/sdcard/download/[my app].apk cmp=com.android.packageinstaller/.InstallAppProgress (has extras) }
INFO/ActivityManager(XXXX): Starting activity: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=[my package]/[Activity A] }

通过启动器/主屏幕:

INFO/ActivityManager(XXXX): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=[my package]/[Activity A] }

当启动安装程序时,我们看到它正在使用该标志0x10000000,但是当使用启动器启动时,我们看到它正在使用0x10200000。它还使用意图类别。

来自docs我们看到的标志是:

public static final int FLAG_ACTIVITY_NEW_TASK
Constant Value: 268435456 (0x10000000)

public static final int FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
Constant Value: 2097152 (0x00200000)

旗帜FLAG_ACTIVITY_RESET_TASK_IF_NEEDED(从启动器启动应用程序时使用)似乎通常会阻止创建新任务(如果已经存在),并且会恢复上次使用的活动。这是期望的行为。为什么在这种情况下它不起作用?我可以做些什么来确保我的应用程序始终将我返回到上一个活动,无论它是否是通过应用程序安装程序/启动器启动的?

如果我使用singleTask它总是会带我回到主要活动(Activity A)每当我运行应用程序时(这也是不可取的)。

这是我发现有人遇到类似问题的问题(没有可接受的答案):从另一个应用程序启动时,应用程序将失去记住其堆栈的能力

编辑:检查标志FLAG_ACTIVITY_BROUGHT_TO_FRONT in onCreate()我们的启动器活动(如果已设置,则完成)似乎解决了主要症状,但显然根本问题仍然存在。有更完整的修复吗?

EDIT2:当您从 Android Market 下载/运行应用程序时,会出现相同的结果,因此上述某些详细信息可能不相关。


添加了antonyt提供的答案:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
        // Activity was brought to front and not created,
        // Thus finishing this will get us to the last viewed activity
        finish();
        return;
    }

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

从 Android 应用程序安装程序和主屏幕启动应用程序时出现活动堆栈排序问题 的相关文章

  • 如何让Android设备始终处于唤醒模式?

    设备root成功后 现在 我需要使设备始终处于唤醒状态 即始终可见 UI 并且没有黑屏或任何白日梦屏幕 为此 我认为我必须完成以下任务 无锁屏 已关闭 睡眠设置为 从不 白日梦设置为 关闭 我发现都是关于应用程序层的 即有一些应用程序可以完
  • Android SyncAdapter 回调

    我已经按照 SDK 中的 SimpleSyncAdapter 示例项目的思路实现了 SyncAdapter AccountManager 和私有 ContentProvider 一切都运转良好 现在 当从远程服务器下载了设置了特定标志的新行
  • 在 Play Services 8.3 中的新 Google 登录中获取人员详细信息

    我正在尝试使用 Play Services 8 3 中引入的新 Google Sign In API 获取用户的个人资料 除了显示名称 电子邮件和 ID 之外 我还需要用户的性别 Plus PeopleApi getCurrentPerso
  • 活动片段已清除索引:-1 是什么意思以及如何修复它?

    我有一个带有自定义滑动菜单的活动 用于类似选项卡的界面 由于某种原因 我的一个 且只有一个 片段出现此错误 我似乎找不到它在做什么 这是堆栈跟踪 E FragmentManager 13024 Failure saving state ac
  • 如何将 FAB 转换为弹出菜单?

    根据材料设计指南 https material google com components buttons floating action button html buttons floating action button transit
  • 底页横向问题

    在横向模式下显示底部工作表对话框时 我遇到了错误的行为 该问题出现在24 版本的设计库中 根据下图 底页仅在横向模式下无法正确显示 我正在使用 BottomSheetDialog 类 并且正在遵循本教程 http www skholingu
  • 没有这样的属性:类的variantConfiguration:

    升级 gradle 4 0 0 应用程序构建失败后 出现错误消息 没有这样的属性 类的variantConfiguration com android build gradle internal variant ApplicationVar
  • 上传图片不显示,但其他图片显示

    我遇到了一些奇怪的事情 我可以看到我正在上传的图像link http www justedhak comlu com images uploaded images jpg但它没有显示在应用程序中 但如果我输入另一张图片link http a
  • 找不到与给定名称匹配的资源:attr 'android:keyboardNavigationCluster'。更新到支持库 26.0.0 时

    我在更新到最新支持库版本 26 0 0 时遇到此问题 https developer android com topic libraries support library revisions html 26 0 0 https devel
  • 当用户拒绝权限时,某些设备上的 onRequestPermissionsResult grantResults 返回空

    In Shot In onRequestPermissionsResult某些设备上的 grantResults 返回空 而某些设备上有一个值PackageManager PERMISSION DENIED当用户拒绝许可时 我已经实现了一个
  • Android 上的自定义视图和窗口属性

    我想要做的是在我的应用程序顶部添加一个视图 该视图类似于过滤器视图 我想操纵屏幕的颜色 并且我还希望能够同时更改屏幕的亮度时间 这两件事似乎是分开起作用的 但不能一起起作用 这是我的代码 添加视图 colourView new Layer
  • Android 中的 FFMpeg jni?

    我已经构建了 Bambuser http bambuser com opensource 提供的 FFMPEG 可执行文件和库 所以我设法构建了 Android 可执行文件和库 如何在 Eclipse 项目中链接这些库并从 Java 调用
  • 如何在开头时解析 json 文件

    我想解析以下 JSON 文件 但以 向我表明这是一个数组 然后继续 对象 我当前的解析器返回一个 JSON 对象 我的问题是 如何修改解析器来解析这个文件 这样解析器将为我提供其他 JSON 文件 从对象或排列开始 JSON 文件 codi
  • gradle 复制为 doLast 不起作用

    我正在尝试做一件非常简单的事情 由于 gradle 在清理时会删除构建目录中的所有文件 因此我想在创建发布版本时将 apk 移至其他位置 所以我在链中添加了一个复制任务 并将其设置为最后一个 我尝试过的任何方法都不起作用 所以我简化了它并添
  • android形状xml旋转可绘制以编程方式改变颜色

    这是三角形的 xml
  • 蓝牙权限在 jetpack compose 中无法正常工作

    我在用com google accompanist accompanist permissions 0 25 1在我的项目中 我正在尝试在运行时请求蓝牙权限 我想知道用户如何知道权限被永久禁用 清单 xml
  • Android Studio gradle 构建时间太长

    My 安卓工作室项目过去构建速度更快 但现在需要很长时间才能构建 有什么想法可能导致延误吗 我努力了https stackoverflow com a 27171878 391401 https stackoverflow com a 27
  • Android:非键盘输入法

    我正在尝试为 Android 创建一个不是传统键盘 对应于不同字母的按键行 的 IME 并且我无法找到有关如何执行此操作的有用资源 因为 SDK 中的所有代码示例都使用键盘 API它是内置函数 我在 XML 文件中设计了 IME 界面 就好
  • Unity 上适用于 Android 的 vuforia 插件和 prime31 facebook 插件之间的冲突

    如今客户需要它 这真的很紧急 T T 我在 Unity 上的 Android 应用程序中同时安装了 vuforia 插件和 prime31 facebook 插件 难点在于androidmanifest xml文件 它们都充当 MAIN 和
  • 如何获取 res.drawable 文件夹的路径来复制文件?

    我正在编写我的应用程序AndroidStudio 我的里面有gif文件drawable gifs文件夹 我希望将该文件复制到MediaStore Images Media单击按钮后的文件夹 目前 即使使用发布的一些答案 我也无法获取我的 g

随机推荐

  • PHP验证24小时时间格式

    我允许用户选择一个小时00 00 00 to 23 00 00并需要检查他们是否提交了正确的格式 是否有正则表达式或 php 函数可以验证 24 小时格式 例如HH MM SS 我找到了一些正则表达式示例 但我验证的 24 小时时间始终设置
  • 如何使用杰克逊模块休眠序列化延迟加载的实体?

    我正在尝试使用 angularjs 和 springmvc 构建一个应用程序 我有两个类 Province 和 Comunidad Entity name Provincia Table name T PROVINCIA public cl
  • 在 Android AOSP 中使用预构建共享库

    我想在 AOSP 中使用预构建的共享库 该库在 Android mk 中定义如下 include CLEAR VARS LOCAL MODULE foo LOCAL MODULE SUFFIX so LOCAL MODULE CLASS S
  • TypeScript - 防止 null 的类型

    我已经使用下面的守卫打字nullobject prop 但仍然出现错误 function a par a string b null string a string b string undefined if par b null retu
  • 实体框架 Code First 4.3 / 相关表的 LINQKit 谓词

    我正在使用 Entity Framework 4 3 1 和 Code First 方法 另外 我正在使用 LinqKit 以便使用 PredicateBuilder 如果我有这样的表 位置 时区 多 1 我希望有这样的东西 Express
  • Struts struts-config.xml 动作映射解释

    我是 Struts 框架的菜鸟 我试图了解动作映射到底是如何工作的 假设我有一个发送 AJAX 请求的 JavaScript 文件 button click function ajax url myTestUrl do success fu
  • 孩子们如何收听/捕捉父母的事件

    父级如何触发自定义事件来通知其子级 兄弟姐妹 例如 div div div div div2 had addEventListener customEvent2 doSth 进而div1将触发自定义事件 customEvnet2 但这永远不
  • 何时使用“self”访问属性

    我已经阅读了该网站上有关此问题的许多问题 我的理解如下 self property 访问手动或通过 synthesize 创建的 getter setter 方法 根据属性是否被声明为保留 复制等 保留计数被正确修改 例如保留属性 释放先前
  • 当多个客户端推送到同一个远程仓库时,git如何处理并发问题?

    对于每个http请求 一个单独的进程git http backend运行在服务器端 当多个客户端推送到同一个远程存储库时 它如何处理并发问题 例如 它是否创建锁定文件以及名称是什么 注意 远程存储库是裸露的 与通过 SSH 调用的方式相同
  • 使用用户定义的转换将字符串转换为类型安全枚举

    为了将 Enum 与字符串结合使用 我实现了一个基于 StringEnum 类https stackoverflow com a 424414 1293385 但是 当我尝试实现建议的用户定义转换操作时 我遇到了问题 StringEnum类
  • 应用工具栏时崩溃

    我是 Android 编程新手 当我将工具栏应用到我的应用程序中时 我遇到了这个问题 当我尝试运行该应用程序时 它崩溃了 这是代码 ToolbarActivity java package com example toolbar impor
  • 异步方法中的最后一个异步调用是否需要等待?

    我无法理解当异步方法调用是我的异步方法中的最后一个调用时是否需要等待语句 例如 public async Task CallAsync byte data await Call1Async data Call2Async data publ
  • Hibernate OnetoMany、ManyToOne 映射给出 null

    我有 2 个类 名为 PurchaseList java 和 PurchaseListItems java 我必须在PurchaseListItems 中映射PurchaseList 采购清单 java OneToMany cascade
  • gitea 和 jenkins webhook

    我正在测试 Gitea 并希望它能够触发 Jenkins 构建 这是非常基本的用例 我知道现有的 GOGs webhook 插件可以使用 但最近还发现 Jenkins 也有一个 Gitea 插件 在 GOGS 情况下 您可以通过以下方式致电
  • Ruby 安装 (2.2.2) 在 macOS Big Sur 中失败

    我在 macOS Big Sur 上安装 Ruby 2 2 2 时遇到了一些问题 有人遇到过类似的问题并且能够解决吗 非常感谢 Error Downloading openssl 1 0 2u tar gz gt https dqw8nmj
  • Android M:如何获取当前前台活动包名称(从服务)

    在Android L上很容易从ActivityManager服务中获取正在运行的任务列表 并且首先返回当前活动的任务 但它不再适用于 Android M 返回列表仅包含我的应用程序任务 有什么办法解决吗 My code List
  • 计数汽车 OpenCV + Python 问题

    我已经trying在过线时计算汽车数量 它可以工作 但问题是它对一辆车进行多次计数 这是荒谬的 因为它只应该计算一次 这是我正在使用的代码 import cv2 import numpy as np bgsMOG cv2 Backgroun
  • 为什么 (long)9223372036854665200d 给我 9223372036854665216?

    我知道一些带有精确误差的奇怪东西 但我无法理解 Why is long 9223372036854665200d给我9223372036854665216 9223372036854665200d是类型常量double 然而 9223372
  • Ruby 和 Python 版本的“self”有什么区别?

    我已经完成了一些 Python 但现在才开始使用 Ruby我可以很好地解释这两种语言中 自我 之间的区别 乍一看很明显 Self 不是 Python 中的关键字 但无论你如何称呼它 都有一个 self like 值 Python 方法接收
  • 从 Android 应用程序安装程序和主屏幕启动应用程序时出现活动堆栈排序问题

    仅出于测试目的 我允许通过 URL 下载和安装我的应用程序 APK 一旦下载到手机上 它就可以通过 Android 应用程序安装程序启动 用户可以选择将其安装到设备上然后运行 考虑一下我们是否以上述方式下载并运行应用程序 我的应用程序中的主