【问题标题】:Android build in store behaves differently than apk installed via USBAndroid build in store 的行为与通过 USB 安装的 apk 不同
【发布时间】:2014-05-20 09:40:02
【问题描述】:

我遇到了一个非常令人困惑的问题。我已经构建了我的应用程序的最终版本 APK,将其提交到 Play 商店,并安装在我的测试设备上。当我以这种方式安装该应用程序时,它会表现出不同的启动模式行为。

我生成的 APK 是通过 Proguard 和 zipalign 构建的 Gradle 的产物。为了便于解释,假设我的应用程序是仪表板类型的应用程序,其主要活动显示活动 B 的启动按钮。我获取了此版本 APK 并通过 USB 'adb install' 将其安装到我的设备上,所以我正在比较完全相同的 APK有两种不同的安装方法。

USB方法:当用户点击主Activity中的按钮启动Activity B时,Activity B启动并显示在屏幕上。如果用户点击主页按钮(接听电话等)然后返回应用程序,Activity B 仍在显示。这是期望的(和预期的)行为。

Store 方法:从商店下载 APK 并再次安装/启动会显示主 Activity。单击按钮时,将再次启动 Activity B。现在,当用户点击 home 并返回时,后台堆栈显然已被清除,主 Activity 再次显示。

我没有在清单中指定任何特殊的启动模式,因此所有活动都是标准的。安装方法怎么会影响这种东西!?这让我发疯。有谁知道为什么会发生这种情况?

【问题讨论】:

  • 只是猜测,但您是在使用 adb 推送发布版本还是调试版本?
  • 发行版,和我上传到 Play 的版本相同:/
  • 好的,你确定你不是在一个实例而不是另一个实例中恢复应用程序吗?
  • 除了this,我找不到任何说apk的功能被修改...

标签: android android-intent google-play apk


【解决方案1】:

我遇到了同样的问题,这对我有用。在 Manifest 的活动元素中显式设置 launchMode。

android:launchMode="singleTop"

“如果 Activity 的实例已经存在于目标任务的顶部,系统会通过调用其 onNewIntent() 方法将 Intent 路由到该实例,而不是创建 Activity 的新实例。”

有关更多选项和说明,请参阅文档: http://developer.android.com/guide/topics/manifest/activity-element.html

【讨论】:

  • 我也面临同样的问题,我应该将此启动模式应用于哪个活动,以及我应该在新意图方法中处理什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多