一个activity开启了画中画后,再打开同app的其他activity也会出现在画中画小界面;

解决这个问题,可以在指定出现画中画的清单文件AndroidManifest.xml中用如下组合配置:

android:taskAffinity=".pipAct"
android:excludeFromRecents="true"

在 Android 中,android:excludeFromRecents="true" 是一个用于控制 Activity 是否显示在最近任务列表(Recents)中的属性。当与画中画(PiP)模式结合使用时,需要特别注意以下行为和潜在问题:

1. excludeFromRecents 的作用

  • 功能:设置为 true 的 Activity 不会出现在最近任务列表中。
  • 典型场景:包含敏感信息的 Activity(如支付页面)、短暂过渡的 Activity(如启动页)。
  • Manifest 配置示例:
<activity
    android:name=".YourActivity"
    android:excludeFromRecents="true"
    android:supportsPictureInPicture="true">
</activity>

2. PiP 与 excludeFromRecents 的交互

2.1 行为分析
  • 进入 PiP 模式时:

    • 若 Activity 设置了 excludeFromRecents="true",进入 PiP 后:
      • Activity 不会显示在最近任务列表中。
      • 但画中画窗口仍会悬浮在屏幕上,用户可通过点击窗口返回 Activity。
    • 若未设置该属性(默认 false),Activity 会保留在最近任务列表中。
  • 退出 PiP 模式时:

    • 若 Activity 被销毁(如因内存不足),重新进入时会重建 Activity。
    • 若 Activity 未被销毁,会恢复到之前的状态。
2.2 潜在问题
  • 任务栈管理混乱:若多个 Activity 设置了 excludeFromRecents="true" 并进入 PiP,返回时可能导致任务栈顺序异常。
  • 用户体验影响:用户可能无法通过最近任务列表快速访问 PiP 中的 Activity。

3. 适用场景

  • 适合组合的场景:

    • 视频播放 Activity:用户希望在后台播放时不被他人看到播放内容。
    • 临时预览窗口:如相机预览、地图定位窗口,不需要常驻最近任务列表。
  • 不建议组合的场景:

    • 需要频繁切换的多任务场景(如多窗口办公应用)。
    • 用户可能希望从最近任务列表快速恢复的 Activity。

4. 最佳实践

4.1 明确业务需求
  • 若 Activity 内容敏感(如视频会议、支付页面),可组合使用 excludeFromRecents="true" 和 PiP。
  • 若需要用户快速访问,建议保持 excludeFromRecents="false"。
4.2 处理返回逻辑
  • 当 Activity 从 PiP 恢复时,确保正确处理数据恢复:
@Override
protected void onResume() {
    super.onResume();
    // 恢复 PiP 模式下暂停的操作(如视频播放)
    if (wasInPictureInPictureMode) {
        resumePlayback();
        wasInPictureInPictureMode = false;
    }
}

@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) {
    super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig);
    wasInPictureInPictureMode = isInPictureInPictureMode;
    if (isInPictureInPictureMode) {
        pausePlayback();
    } else {
        updateUiForFullscreen();
    }
}
4.3 测试兼容性
  • 确保在不同 Android 版本(Android 8.0+)和设备上测试 PiP 与 excludeFromRecents 的组合行为。
  • 检查 Activity 重建时的状态保存与恢复(使用 onSaveInstanceState)。

5. 注意事项

  • Android 12+ 的限制:从 Android 12 开始,画中画模式的 Activity 必须设置 android:supportsPictureInPicture="true",否则无法进入 PiP。
  • 用户预期管理:若 Activity 不在最近任务列表中,需提供其他方式让用户返回(如通知栏、悬浮按钮)。

通过合理配置 excludeFromRecents 和处理 PiP 生命周期,可实现符合用户需求的画中画体验。

转自:画中画中 excludeFromRecents - 豆包

更多推荐