SurfaceView和View之间的区别是什么?(Difference between Surfa

2019-06-18 04:15发布

什么时候有必要,或者最好使用SurfaceView代替的View

Answer 1:

景观都得出同样的GUI线程这也适用于所有用户的互动上。

所以,如果你需要迅速更新GUI或者渲染花费太多时间,影响用户体验,然后使用SurfaceView



Answer 2:

有几件事情我已经注意到:

  • SurfaceViews包含一个很好的渲染机制,允许线程不使用处理器(好的动画)更新面的内容。
  • Surfaceviews 不能是透明的,它们只能出现在后面视图层次结构的其他元件。
  • 我发现,他们比呈现到浏览快得多动画。

欲了解更多信息(和一个伟大的使用示例)是指在SDK的范例章节的LunarLander项目。



Answer 3:

更新2014年5月9日

好。 我们现在正式文件。 它谈了我所提到的,以更好的方式。


阅读更详细的在这里 。

是的,主要的区别是surfaceView可以在后台线程更新。 然而,还有更多你可能不在乎。

  • surfaceView具有奉献表面缓冲器,而所有的视图股由分配的ViewRoot一个表面缓冲器。 在另一个字,surfaceView耗费更多的资源。

  • surfaceView不能硬件加速(如JB4.2的),而对正常概况95个%操作HW用openGL ES加速。

  • 更多的工作应该怎样做才能创建自定义surfaceView。 你需要监听器surfaceCreated /销毁事件,创造一个渲染线程,更重要的是,同步渲染线程和主线程。 然而,自定义视图,所有你需要做的是重写onDraw方法。

  • 更新定时是不同的。 普通视图更新机制约束或框架控制:你叫view.invalidate在UI线程或view.postInvalid其他线程指示该视图应该更新的框架。 但是,视图不会立即更新,但等到明年VSYNC事件到来。 最简单的方法来了解VSYNC是要考虑它是为火每隔16毫秒为60fps的屏幕的计时器。 在Android中,所有的普通视图更新(和显示实际,但我今天不会谈论它),与VSYNC同步,从而达到更好的平滑度。 现在,回到surfaceView,你可以随时为你想呈现它。 不过,我也很难分辨它是否是一个优势,因为显示器还与VSYNC同步,如前所述。


Answer 4:

主要的区别在于, SurfaceView可以通过后台theads上绘制,但Views不能。 SurfaceViews使用更多的资源,但这样你不想要,除非你不得不使用它们。



Answer 5:

SurfaceView是Android中一个自定义的观点,即可以用于在其内部绘制。

之间的主要区别ViewSurfaceView是一个视图中绘制的UI Thread ,它用于所有的用户交互。

如果你想快速足够更新UI和渲染它一个很好的信息数量,一个SurfaceView是一个更好的选择。

但也有一些技术内部的SurfaceView

1.他们不是硬件加速。

当你调用方法2.普通视图渲染invalidatepostInvalidate()但是这并不意味着该视图会立即更新(A VSYNC将被发送,并且操作系统决定何时它被更新。该SurfaceView可以立即更新。

3.一种SurfaceView具有分配surface buffer ,所以它是更昂贵



Answer 6:

一个surfaceview和视图之间的主要区别是,刷新屏幕,我们必须从那里视图被定义在同一个线程调用无效方法的普通视图。 但是,即使我们称之为无效,刷新不会立即发生。 它只有VSYNC信号的下一个到来之后发生。 VSYNC信号是一个内核生成的信号,其发生的每16.6毫秒或此也被称为每秒60帧。 因此,如果我们想在画面的刷新(例如,对于运动速度非常快的动画)更多的控制,我们不应该使用普通视图类。

在surfaceview的情况下,另一方面,我们可以以最快的速度刷新屏幕,因为我们希望,我们可以从后台线程做。 让人耳目一新的surfaceview真的不取决于VSYNC,如果我们想要做的高速动画,这是非常有用的。 我有一些培训视频和示例应用程序这很好地解释了这一切。 请看看下面的培训视频。

https://youtu.be/kRqsoApOr9U

https://youtu.be/Ji84HJ85FIQ

https://youtu.be/U8igPoyrUf8



Answer 7:

为什么要使用SurfaceView,而不是经典视图类...

其中一个主要的原因是SurfaceView可以快速呈现在屏幕上。

在简单的话一个SV是更能够管理的定时和渲染动画。

为了更好地理解什么是SurfaceView我们必须View类进行比较。

有什么区别...看看视频中的这个简单的解释

https://m.youtube.com/watch?feature=youtu.be&v=eltlqsHSG30

很好用的景观,我们有一个大问题....渲染动画的时间。

通常情况下的onDraw()从Android的运行时系统调用。

因此,Android的运行时系统调用的onDraw(),那么应用程序无法控制

显示的定时,而这是用于动画重要。 我们有时间的差距

应用程序(我们的游戏)和Android运行时系统之间。

该SV它可以通过一个专门的线程调用的onDraw()。

因此:应用控制定时。 因此,我们可以显示动画的下一个位图图像。



文章来源: Difference between SurfaceView and View?