在哪里找到管理SurfaceView的线程

时间:2015-02-02 12:07:26

标签: android multithreading android-activity surfaceview

我有一个托管一些视图的活动:SurfaceView,SeekBar和一些按钮。 SurfaceView显示动画,其他视图控制动画的某些参数。我在活动中创建了一个Thread,在所有视图上运行所有这些操作。

但是在网络上我总是发现SurfaceView的例子有自己的线程,以便在surfaceCreated()中启动它并在surfaceDestroyed()等中停止它。但我的线程不仅仅考虑SurfaceView,因为其他视图与动画共生或交互。那么,我必须把线程放在哪里?在SurfaceView类中(以及如何从那里访问其他视图)?或者像我一样在Activity类中?

1 个答案:

答案 0 :(得分:0)

SurfaceView与Activity生命周期之间的交互并不简单。可以找到问题的完整讨论in an appendix to the graphics architecture doc

  

当在SurfaceView中使用单独的渲染器线程时,这引发了一个基本问题:线程的生命周期是否应该与Surface或Activity的生命周期相关联?答案取决于屏幕空白时您想要发生的事情。有两种基本方法:(1)在Activity开始/停止时启动/停止线程; (2)在Surface创建/销毁上启动/停止线程。

您可以在Grafika中找到这两种方法的示例。例如,HardwareScalerActivity使用方法#2,在Surface回调中创建并加入渲染线程。 TextureFromCameraActivity使用方法#1,因为它也管理相机。在这两种情况下,都需要注意边缘情况,例如: HardwareScalerActivity启动渲染线程,然后在继续之前等待它完成初始化。