【问题标题】:Is it necessary to use a separate thread when using SurfaceView?使用SurfaceView时是否需要使用单独的线程?
【发布时间】:2015-10-10 18:52:03
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android multithreading surfaceview


    【解决方案1】:

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

    例如,看看Grafika'smulti-surface test”活动。它具有从 UI 线程呈现的三个重叠的 SurfaceView。如果您单击“反弹”按钮,它会启动一个新线程来控制动画,因为这样做更简单(它可以循环并绘制,而不必将定时绘制事件发布到 UI 循环器) .当 Activity 暂停时,反弹线程停止。请注意,代码在surfaceDestroyed() 中没有任何作用。

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

    (它can be tricky 让一切都正确。)

    【讨论】:

    • 谢谢,这真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多