Android O的画中画模式下任务列表和返回栈

18

有人对在Android O的PiP模式下管理后退堆栈和任务有经验或建议吗?

进入PiP模式似乎会将活动与当前任务堆栈分离。而退出并不会恢复它。

Chrome在使用PiP时似乎正确处理了后退堆栈,您可以进入pip模式,浏览其他应用程序,将pip恢复到全屏状态,然后按返回键回到网页。在其处于PiP模式时,您也不会在任务列表中看到Chrome。我是否遗漏了什么,或者Chrome正在做一些特殊的事情,或者可能只是为选项卡和全屏视频使用单个活动?

基本上,当从PiP返回时,我希望恢复整个应用程序及其后退堆栈到我们进入PiP的那一点。


我这里有同样的问题,请问你有解决这个问题的方法吗? - Vishal Patoliya ツ
1个回答

20

很不幸,谷歌应用(YouTube,Duo,Chrome)都没有这个问题,因为它们倾向于仅使用单个活动。因此,在进入或离开画中画模式时,最近菜单中没有任务问题,因为它只有一个包含单个活动的任务。这就是为什么当这些应用程序处于PiP模式时,您不会在最近菜单中看到任何条目的原因;它被API隐藏了。

如果您的应用中使用多个活动,则会遇到此问题。这特别普遍,因为大多数应用程序都会在启动其应用程序的任务中使用新的活动来容纳视频播放。

我发现的最好解决方案是使您的视频播放器活动成为自己的任务(设置唯一的任务亲和性)并从最近菜单中隐藏它。这将导致在进入和退出PiP时出现预期行为,并允许用户通过其他任务在您的应用程序中导航而不会干扰PiP任务。不幸的是,这意味着用户将无法从最近的视频播放器中重新进入您的视频播放器;如果用户使用主页或最近的按钮,则视频播放器任务将最终被销毁,您的播放器活动也将完成。

    <activity
            android:name=".YourVideoPlayerActivity"
            android:resizeableActivity="true"
            android:configChanges="keyboardHidden|screenSize|smallestScreenSize|screenLayout|orientation"
            android:supportsPictureInPicture="true"
            android:launchMode="singleTask"
            android:taskAffinity=".YourVideoPlayerActivityTask"
            android:excludeFromRecents="true"
            android:noHistory="true"
            android:autoRemoveFromRecents="true" />

我在清单文件中使用了类似的活动参数,但是在最近使用的应用程序中仍然将新活动视为新任务。由于某些限制,我没有使用noHistory属性。 - Shubham AgaRwal
谢谢,android:taskAffinity和android:excludeFromRecents对我很有帮助。 - Kebab Krabby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接