使用SurfaceView时是否需要使用单独的线程?

时间:2015-07-21 10:50:21

标签: android multithreading surfaceview

在Android中,我使用的是SurfaceView。它位于FrameLayout内部,用于在一般XML布局的顶部透明层上绘制一些东西(使用标准的textViews,按钮等)。绘图不涉及非常密集的计算,并且没有动画,它只是更新响应按钮按下。

我在SurfaceView上看到的所有示例都使用单独的线程进行绘制,然后在OnSurfaceDestroyed中关闭该线程。

我的代码在不使用单独的线程的情况下工作,但偶尔会崩溃/冻结,尤其是在方向/应用程序之间切换时。

所以我的问题是,我是否需要使用额外的线程来防止这些崩溃。如果没有,我在OnSurfaceDestroyed中应该做的其他具体事情是什么? (我不想在这里发布我的所有代码,只是寻找一个简单的是/否响应以及几句话中的原因)。

1 个答案:

答案 0 :(得分:2)

你不需要拥有一个单独的帖子,但这通常是一个好主意。

例如,请查看Grafika's" multi-surface test"活动。它有三个重叠的SurfaceView,它们是从UI线程渲染的。如果你点击"弹跳"按钮,它启动一个新的线程来控制动画,因为这样做更简单(它可以坐在循环中绘制,而不必将定时绘制事件发布到UI looper)。暂停活动时,退回线程停止。请注意,代码在surfaceDestroyed()中没有做任何事情。

SurfaceView和Activity生命周期之间的交互可能很棘手。可以找到讨论here

can be tricky让一切正常。)