4

我有一个同时显示两个窗口的应用程序。窗口 A 显示 a SurfaceView,窗口 B 显示视图。每个窗口(自然)都有自己的与该窗口关联的表面。目前只有窗口 A 显示它SurfaceView在屏幕上,而窗口 B 不显示任何内容。我想在两个窗口之间切换,而用户不会注意到任何闪烁,或者同时看到两个窗口。总之,我想达到以下效果:

  • 窗口 A -> 隐藏 SurfaceView A

  • 窗口 B -> 显示视图 B

两者发生在完全相同的时间。

我面临的问题是,无论我多么努力地尝试同步显示,每个窗口都会在稍微不同的时间范围内显示/隐藏其视图,从而导致屏幕上显示一个或两个视图。

我尝试了以下方法:

  • 线程 A -> 隐藏视图 A -> 准备绘图 ( lockCanvas),并暂停(等待)线程,直到收到信号。

  • 线程 B(UI 线程) -> 显示 SurfaceView B -> 覆盖视图draw,信号线程 A 释放自身,然后绘制。

  • 线程 A -> 接收信号并在屏幕上绘制 ( unlockAndPostCanvas)

在实践中,我得到了不一致的结果,并且两个窗口并不总是同步的。有时我可以看到并排显示两个视图的框架,有时我可以看到根本没有视图的框架。我什至尝试使用Choreographer.postFrameCallback让两个窗口在下一帧更改它们的显示,但同样,我无法实现完全同步。

有人有其他想法吗?

4

0 回答 0