我正在阅读SurfaceView
以及如何使用它,并且我遇到了一些信息,指出SurfaceView
的View#willNotDraw()
默认设置为false,并且您可以致电SurfaceView#onDraw()
。我还读到RomainGuy说这是默认完成的,因为它更高效。我现在的问题是,你什么时候应该在一个单独的线程中处理呼叫SurfaceView#onDraw()
,以及什么时候应该设置View#willNotDraw()
到true
,并且只需拨打SurfaceView#invalidate()
。两者之间是否有区别,并且一个人的表现是否比另一个有所提高?什么时候应该让SurfaceView通过UI线程绘制?
0
A
回答
1
参见:
http://developer.android.com/reference/android/view/View.html#setWillNotDraw(boolean)
我不知道你得到了你的信息,但至少javadoc的说,大多数用户将它设置为false
获得的Android将其发送onDraw
事件本身。关于你什么时候应该这样做的问题,我想说明一下你为什么使用SurfaceView
。
如果您的视图显示一些动态的(例如游戏或东西,有一个严密的事件循环),你要精确地控制更新时发生,特别是如果你将不得不使用的一个方面的信息更详细的形式invalidate
保存重绘整个View
。您不希望Android为您拨打invalidate
,这就是为什么国旗在那里。
如果,另一方面,你只是画一些静态的,这是有道理的,让Android的UI堆栈控制废票。
顺便说一句,invalidate
只发布到重新绘制View
的请求,所以如果你打算使用事件循环式的意识到这一点(onDraw
将某个后你怎么称呼它叫)。
编辑:一些澄清。
1
使用SurfaceView.onDraw()和SurfaceView.invalidate()将使SurfaceView像一个普通视图,你将支付与SurfaceView相关的额外开销。如果你想从UI线程绘制,使用常规的视图来代替。它更容易,更便宜。
相关问题
- 1. 什么时候应该更新UI?
- 2. 什么时候应该使用UdpClient.BeginReceive?什么时候应该在后台线程上使用UdpClient.Receive?
- 3. 什么时候应该使用每个线程同步对象?
- 4. 什么时候应该将一个线程设置为ApartmentState.STA?
- 5. 什么时候应该通过一个类作为参数?
- 6. 什么时候应该通过QListView使用QListWidget?
- 7. 什么时候应该指定CurrentCulture或InvariantCulture,什么时候应该让它不指定?
- 8. 什么时候应该使用Import-Package,什么时候应该使用Require-Bundle?
- 9. 什么时候应该扩展NSDocument,什么时候应该扩展NSWindowController?
- 10. 我们什么时候应该上课,什么时候不应该上课
- 11. 什么时候应该使用AWS,什么时候不使用
- 12. iOS 8远程通知 - 什么时候应该调用registerForRemoteNotifications()?
- 13. 什么时候应该通过实用程序类使用继承?
- 14. 什么时候应该使用getElementById?
- 15. 什么时候应该使用_aligned_malloc()?
- 16. 什么时候应该使用GC.SuppressFinalize()?
- 17. 什么时候应该使用`use`?
- 18. 什么时候应该抛出异常?
- 19. 什么时候应该调用SharedPreferencesBackupHelper()/ BackupAgent?
- 20. 什么时候应该用力推?
- 21. 什么时候应该调用setContentAspectRatio?
- 22. 什么时候应该使用didFinishLaunchingWithOptions?
- 23. 什么时候应该使用模板
- 24. 什么时候应该停止服务
- 25. GitHub:我应该什么时候做叉?
- 26. 什么时候应该使用可可?
- 27. 什么时候应该调用Transaction.delistResource()?
- 28. 我应该什么时候回来?
- 29. 什么时候应该释放内存?
- 30. 什么时候应该使用RESTful?