什么时候有必要,或者最好使用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中一个自定义的观点,即可以用于在其内部绘制。
之间的主要区别View
和SurfaceView
是一个视图中绘制的UI Thread
,它用于所有的用户交互。
如果你想快速足够更新UI和渲染它一个很好的信息数量,一个SurfaceView是一个更好的选择。
但也有一些技术内部的SurfaceView
:
1.他们不是硬件加速。
当你调用方法2.普通视图渲染invalidate
或postInvalidate()
但是这并不意味着该视图会立即更新(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()。
因此:应用控制定时。 因此,我们可以显示动画的下一个位图图像。