我正在尝试制作支持Android N多窗口模式的视频应用。我发现活动生命周期在多窗口模式下变得混乱。这种现象是当我们的应用程序布局在顶部屏幕上,整个屏幕处于纵向状态时,然后我单击主页按钮,调用上方应用onPause()
但未调用onStop()
。
根据google指南https://developer.android.com/guide/topics/ui/multi-window.html#lifecycle,视频应用应暂停onStop()
回调而不是onPause()
回调中的视频播放。
在这种情况下,按下主页按钮,活动进入后台并变得对用户不可见,我们的应用程序应暂停视频播放,但我们无法获得onStop()
回调。同时,活动不会触发onMultiWindowChanged()
回调,这意味着活动仍处于多窗口模式,尽管它处于后台。在这种情况下,isInMultiWindowMode()
将返回true
。
当应用程序位于左侧屏幕且整个屏幕处于横向状态时,也会出现同样的问题。
我已经搜索过这个问题并发现有人在谷歌发布了问题,但未在Android Nougat版本中处理。
那么,什么时候才能在这种情况下暂停我们的视频播放?如果我们在onPause()
回调中暂停视频,但在多窗口模式下用户可以看到该活动。如果我们不这样做,我们就无法在这种情况下获得onStop()
回调。
对于这种情况,是否有一些正确的解决方法?
答案 0 :(得分:2)
当您在多窗口模式下点击主页按钮时,系统处于暂时状态,允许用户在应用程序继续运行时选择要启动的应用程序(如果您是最顶级的应用程序,则会请注意,您仍然可以从应用中看到状态栏)。进入此瞬态模式时没有回调相关,进入此瞬态模式时不应改变行为。
相反,您应该继续播放任何视频 - 只有在收到onStop()
的回叫时才停止播放视频。
答案 1 :(得分:1)
根据官方文件MultiWinodw LifeCycle:
" 多窗口模式不会改变活动生命周期。"
在MultiWindow模式下,用户最近进行过互动的唯一活动将是最活跃的活动,其他活动将进入onPause()
模式,因为它将部分可见。当用户尝试与进入onResume()
状态的其他活动进行互动时,它将成为最顶层的活动,其余活动将进入onPause()
模式。
现在,对于音乐播放器,他们已经明确提到如果你支持MultiWindow模式,即使调用onPause()
方法,你也应该继续播放音乐。
仅在您调用onStop()时停止播放视频。