Media Projection 的 VirtualDisplay 对象在方向改变时被销毁

Media Projection's VirtualDisplay object is destroyed on orientation change

我在媒体投影 API 上使用 google 的 sample project。我观察到的是每次屏幕方向改变时 VirtualDisplay 对象返回为

mVirtualDisplay = mMediaProjection.createVirtualDisplay("ScreenCapture",
                mSurfaceView.getWidth(), mSurfaceView.getHeight(), mScreenDensity,
                DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
                mSurface, null, null);

被销毁(设置为null),我不得不重新开始截屏。我知道这可能是由于屏幕尺寸的变化而需要的,但我希望有一个方法可以避免破坏这个对象并且只是 更新 它所以只有当停止按钮是时屏幕捕获才会停止按下。显然,可以在方向更改后以编程方式重新启动 屏幕捕获,但我宁愿不这样做。我是不是太乐观了?

所以问题出在配置更改时 android 的默认行为。它基本上破坏了 activity 及其所有字段(在本例中包括 VirtualDisplay 实例)。此外,在此处将 VirtualDisplay 实例保留为 UI 状态不是一种选择。所以我最终通过将 configChanges 标记添加到我的 activity

来自己处理方向更改 here
<activity
    android:name=".MyActivity"
    android:configChanges="orientation|screenSize|keyboardHidden" />

这意味着方向更改不会再破坏任何内容,但需要使用 activity 的 onConfigurationChanged 回调手动处理布局更改。