android surfaceview onDraw vs thread.onDraw

android surfaceview onDraw vs thread.onDraw,android,surfaceview,ondraw,Android,Surfaceview,Ondraw,android游戏最好使用什么: 带有渲染线程的SurfaceView 或 带有调用SurfaceView函数doDraw()的线程的SurfaceView 谢谢。SurfaceView中的绘图已在单独的线程中处理。你不需要产生一个新的 请参阅有关它的详细信息: 此类的目的之一是提供一个曲面,在该曲面中次线程可以渲染到屏幕中。如果要以这种方式使用它,则需要了解一些线程语义: 将从运行SurfaceView窗口的线程(通常是应用程序的主线程)调用所有SurfaceView和SurfaceHo

android游戏最好使用什么:

  • 带有渲染线程的
    SurfaceView

  • 带有调用
    SurfaceView
    函数
    doDraw()的线程的
    SurfaceView


谢谢。

SurfaceView中的绘图已在单独的线程中处理。你不需要产生一个新的

请参阅有关它的详细信息:

此类的目的之一是提供一个曲面,在该曲面中次线程可以渲染到屏幕中。如果要以这种方式使用它,则需要了解一些线程语义:

  • 将从运行SurfaceView窗口的线程(通常是应用程序的主线程)调用所有SurfaceView和SurfaceHolder.Callback方法。因此,它们需要与绘图线程也接触的任何状态正确同步
  • 必须确保绘图线程在有效时仅接触基础曲面——介于SurfaceHolder.Callback.surfaceCreated()和SurfaceHolder.Callback.surfaceDestroyed()之间

如果查看LunarLander示例,SurfaceView有一个线程(称为LunarThread),该线程有一个名为doDraw()的函数,该函数用于绘制画布。我的问题是,将doDraw函数(从线程)移动到SurfaceView类和从线程调用函数是否有任何区别,比如:MySurfaceView.doDraw()@jerenj doDraw()函数只是为了使绘图实现保持分离,并提高可读性,因为它不会在其中创建任何新线程。关于创建一个
MySurfaceView.doDraw()
方法,我认为让它与SurfaceHolder保持同步是相当麻烦的。为什么要重新发明轮子?唯一困扰我的是(在月球的例子中),如果你把月球的X位置存储在月球上,每次按下home键,你的线程就会终止,X位置就会丢失。因此,我认为如果我将draw方法移动到surfaceview类并从lunarRead调用它,问题就解决了(因为lunarview存储当前的X位置)。或者只将lunar变量移动到lunarview。文档中说“可以”,而不是“可以”--我不相信绘图已经在单独的线程中处理。您对文档的解释可能不正确,因为它说:它允许辅助线程进行渲染/绘图。并且要注意,如果这样做,必须注意与主线程的同步。