2

TL;DR 当我从一个活动转到另一个活动并返回后点击工具栏中的导航图标时,我的应用程序被最小化(就像按下了主页按钮一样)。

详细的动作流程:

  • 打开app,出现Activity1
  • 点击导航图标(抽屉正常打开,在这个阶段我可以通过按导航图标关闭和打开它任意次数)
  • 点击带有标志的 Activity2 的抽屉菜单项FLAG_ACTIVITY_REORDER_TO_FRONT
  • Activity2加载完成后,点击导航图标,抽屉正常打开
  • 点击带有标志的 Activity1 的抽屉菜单项FLAG_ACTIVITY_REORDER_TO_FRONT(此时此 Activity 存在,因此被带到前面)
  • 将Activity1拉到最前面后,再次点击导航图标打开抽屉
  • 抽屉开始从左侧滑出,但应用程序在完全滑出之前最小化

我知道该应用程序已最小化,因为当我打开它时,Activity1 在屏幕上并带有一个打开的抽屉

没有异常或日志(级别为 Verbose),这仅在 OnePlus 2 上发生(该应用程序在 Nexus 4 上运行良好)

4

1 回答 1

0

在我的情况下,我需要在 2 个不同的堆栈之间切换。我FLAG_ACTIVITY_REORDER_TO_FRONT用来处理startActivityfinish()

但我和你有同样的问题,在一种情况下它会被最小化:

Activity Class A (instance 1) -> open new Activity Class A (instance 2) -> Activty Class B -> switch to Activity Class A (instance 2) by FLAG_ACTIVITY_REORDER_TO_FRONT,然后FLAG_ACTIVITY_REORDER_TO_FRONT回到(instance 1)将最小化(去后台),但如果我将它设为前台,它确实完成了(),它只是由于未知原因进入后台。

只有当堆栈上的两个 A 类实例连续出现时才会发生。我检查堆栈adb shell dumpsys window windows | grep 'Window #'

在我尝试了很多FLAG组合都没有成功之后,我想出了一个hack的想法,即创建一个Distinct活动类。

虽然我已经能够检测到这是堆栈上的同一个类(用于registerActivityLifecycleCallbacks推送/弹出活动列表堆栈),但是当我想返回时,我只需调用Distinct该类并finish()立即将其放入onCreate(). 然后在finish()代码上将FLAG_ACTIVITY_REORDER_TO_FRONTA类实例1。由于Distinct类不是A的同一个类,那么它能够FLAG_ACTIVITY_REORDER_TO_FRONT实例1和关闭实例2就好了。

[更新]

这个答案实际上是错误的,但最终我找到了更好的方法并在这里写下答案。

于 2018-12-05T21:22:31.257 回答