图片模式下 Android O 图片的任务列表和回栈

Posted

技术标签:

【中文标题】图片模式下 Android O 图片的任务列表和回栈【英文标题】:Task List and Back Stack with Android O Picture in Picture mode 【发布时间】:2017-12-24 13:43:29 【问题描述】:

有没有人有任何关于在 android O 的画中画模式下管理后台堆栈和任务的经验或建议?

进入画中画模式似乎会将活动从当前任务堆栈中分离出来。退出并不能恢复它。

Chrome 在使用 PiP 时似乎可以正确处理后台堆栈,因为您可以进入 pip 模式,可以在其他应用程序中导航,将 pip 恢复为全屏并按返回以返回网页。在 PiP 模式下,您也不会在任务列表中看到 Chrome。是否有我遗漏的东西,或者 Chrome 是否在做一些特殊的事情,或者可能只对标签和全屏视频使用单个活动?

基本上我想恢复整个应用程序,它在我们从画中画返回时进入画中画的那一点的回栈。

【问题讨论】:

我也有同样的问题,你有解决这个问题的办法吗? 【参考方案1】:

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

如果您在应用中使用多个活动,那么您将遇到此问题。这尤其常见,因为大多数应用都会在启动应用的任务中使用新的 Activity 来存放视频播放。

我发现的最佳解决方案是让您的视频播放器 Activity 位于其自己的任务中(设置独特的任务关联)并将其从最近菜单中隐藏。这会在进入和退出 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" />

【讨论】:

我在清单中有类似的活动参数。但是,将最近应用程序中的新活动视为一项新任务。 PS 由于一些限制,我没有使用 noHistory 属性。 谢谢,android:taskAffinity 和 android:excludeFromRecents 为我完成了这项工作。

以上是关于图片模式下 Android O 图片的任务列表和回栈的主要内容,如果未能解决你的问题,请参考以下文章

Android相机以人像模式保存图片

android如何获取有图片的文件夹列表?

SpringBoot+ajax+formData实现图片上传和回显

android图片压缩上传系列-service篇

Android 文件管理分区存储 ( 创建与查询图片文件 )

android中如何获取指定目录下的图片