在Android N多窗口模式下按下主页按钮时未调用onStop()

时间:2016-09-28 03:54:40

标签: android activity-lifecycle android-7.0-nougat multi-window

我正在尝试制作支持Android N多窗口模式的视频应用。我发现活动生命周期在多窗口模式下变得混乱。这种现象是当我们的应用程序布局在顶部屏幕上,整个屏幕处于纵向状态时,然后我单击主页按钮,调用上方应用onPause()但未调用onStop()

根据google指南https://developer.android.com/guide/topics/ui/multi-window.html#lifecycle,视频应用应暂停onStop()回调而不是onPause()回调中的视频播放。

在这种情况下,按下主页按钮,活动进入后台并变得对用户不可见,我们的应用程序应暂停视频播放,但我们无法获得onStop()回调。同时,活动不会触发onMultiWindowChanged()回调,这意味着活动仍处于多窗口模式,尽管它处于后台。在这种情况下,isInMultiWindowMode()将返回true

当应用程序位于左侧屏幕且整个屏幕处于横向状态时,也会出现同样的问题。

我已经搜索过这个问题并发现有人在谷歌发布了问题,但未在Android Nougat版本中处理。

https://code.google.com/p/android/issues/detail?id=215650&can=1&q=multi%20window%20onstop&colspec=ID%20Status%20Priority%20Owner%20Summary%20Stars%20Reporter%20Opened

那么,什么时候才能在这种情况下暂停我们的视频播放?如果我们在onPause()回调中暂停视频,但在多窗口模式下用户可以看到该活动。如果我们不这样做,我们就无法在这种情况下获得onStop()回调。 对于这种情况,是否有一些正确的解决方法?

2 个答案:

答案 0 :(得分:2)

当您在多窗口模式下点击主页按钮时,系统处于暂时状态,允许用户在应用程序继续运行时选择要启动的应用程序(如果您是最顶级的应用程序,则会请注意,您仍然可以从应用中看到状态栏)。进入此瞬态模式时没有回调相关,进入此瞬态模式时不应改变行为。

相反,您应该继续播放任何视频 - 只有在收到onStop()的回叫时才停止播放视频。

答案 1 :(得分:1)

根据官方文件MultiWinodw LifeCycle

" 多窗口模式不会改变活动生命周期。"

在MultiWindow模式下,用户最近进行过互动的唯一活动将是最活跃的活动,其他活动将进入onPause()模式,因为它将部分可见。当用户尝试与进入onResume()状态的其他活动进行互动时,它将成为最顶层的活动,其余活动将进入onPause()模式。

现在,对于音乐播放器,他们已经明确提到如果你支持MultiWindow模式,即使调用onPause()方法,你也应该继续播放音乐。

仅在您调用onStop()时停止播放视频。