为什么我的应用程序在没有明显原因的情况下被最小化?

时间:2016-05-13 14:19:48

标签: android oneplustwo

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

详细的行动流程:

  • 打开应用程序,Activity1出现
  • 点击导航图标(抽屉正常打开,我可以在此阶段关闭并打开任意次,按导航图标)
  • 点击抽屉菜单项,其中包含标记FLAG_ACTIVITY_REORDER_TO_FRONT
  • 的Activity2
  • 在Activity2完成加载后,点按导航图标,抽屉正常打开
  • 点击抽屉菜单项,该项目以标志FLAG_ACTIVITY_REORDER_TO_FRONT启动Activity1(此时此活动已存在,因此被带到前面)
  • 将Activity1置于最前面后,再次点按导航图标以打开抽屉
  • 抽屉开始从左侧滑出,但应用程序在完全用完之前最小化

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

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

1 个答案:

答案 0 :(得分:0)

就我而言,我需要在2个不同的堆栈之间切换。我使用FLAG_ACTIVITY_REORDER_TO_FRONT处理startActivityfinish()

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

活动类A(实例1)->打开新的活动类A(实例2)->活动类B->通过FLAG_ACTIVITY_REORDER_TO_FRONT,然后按FLAG_ACTIVITY_REORDER_TO_FRONT切换到活动类A(实例2)返回到(实例1)将最小化(转到背景),但是如果我将其设为前台,它确实完成了(),则它会由于未知原因而回到背景。

只有在堆栈上连续有两个A类实例时才会发生。我通过adb shell dumpsys window windows | grep 'Window #'

检查堆栈

在我尝试了很多FLAG组合但都没有成功之后,我想到了一个骇客的主意,即创建一个Distinct活动类。

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

[更新]

这个答案实际上是有问题的,但是最终我找到了更好的方法,并写出答案here