2015-07-21 69 views
0

在Android中,我使用的是SurfaceView。它位于FrameLayout内部,用于在通用XML布局顶部的透明图层上绘制几件事物(使用标准textView,按钮等)。图形不涉及非常密集的计算,并且不生成动画,只会更新响应按钮按下。当使用SurfaceView时,是否需要使用单独的线程?

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

我的代码没有使用单独的线程,但偶尔会崩溃/冻结,特别是在方向/应用程序之间切换时。

所以我的问题是,我是否需要使用额外的线程来防止这些崩溃。如果不是,在OnSurfaceDestroyed中还有其他特定的事情吗? (我宁愿不要在这里发布我的所有代码,只是在几句话中寻找一个简单的是/不答复和原因)。

回答

2

你不需要需要有一个单独的线程,但它通常是一个好主意。

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

SurfaceView和Activity生命周期之间的交互可能会非常棘手。讨论可以发现here

(它can be tricky让一切正常。)

+1

谢谢,这真的很有帮助。 – stantronic

相关问题