【问题标题】:Where to locate thread that manages the SurfaceView too在哪里也可以找到管理 SurfaceView 的线程
【发布时间】:2015-02-02 12:07:25
【问题描述】:

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

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

【问题讨论】:

    标签: android multithreading android-activity surfaceview


    【解决方案1】:

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

    这会在 SurfaceView 使用单独的渲染器线程时提出一个基本问题:线程的生命周期应该与 Surface 或 Activity 的生命周期相关联吗?答案取决于您希望在屏幕变黑时发生什么。有两种基本方法:(1)在Activity启动/停止时启动/停止线程; (2) 在 Surface create/destroy 上启动/停止线程。

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

    【讨论】:

      猜你喜欢
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 2023-02-06
      • 2014-01-26
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      相关资源
      最近更新 更多