我正在閱讀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. 什麼時候應該開始在SurfaceView上繪圖?
- 2. 什麼時候應該更新UI?
- 3. 什麼時候應該使用UdpClient.BeginReceive?什麼時候應該在後臺線程上使用UdpClient.Receive?
- 4. 什麼時候應該用這個C#實用程序類來通過聯鎖來控制線程
- 5. 什麼時候應該將一個線程設置爲ApartmentState.STA?
- 6. 什麼時候應該使用select與多線程比較?
- 7. 什麼時候應該使用每個線程同步對象?
- 8. 什麼時候應該通過QListView使用QListWidget?
- 9. 什麼時候應該通過一個類作爲參數?
- 10. 什麼時候應該通過Autohotkey中的SentInput使用`Sent`?
- 11. 什麼時候應該指定CurrentCulture或InvariantCulture,什麼時候應該讓它不指定?
- 12. 什麼時候應該擴展NSDocument,什麼時候應該擴展NSWindowController?
- 13. 什麼時候應該使用sed,什麼時候應該使用awk
- 14. 什麼時候應該使用memcpy,什麼時候應該使用memmove?
- 15. 什麼時候應該使用Import-Package,什麼時候應該使用Require-Bundle?
- 16. 我們什麼時候應該上課,什麼時候不應該上課
- 17. 什麼時候應該使用async/await,什麼時候不用?
- 18. 什麼時候應該使用AWS,什麼時候不使用
- 19. 什麼時候建議從UI線程本身發佈到UI線程?
- 20. iOS 8遠程通知 - 什麼時候應該調用registerForRemoteNotifications()?
- 21. Android SurfaceView使用線程繪製畫布
- 22. Android使用SurfaceView和線程繪製
- 23. 什麼時候應該通過實用程序類使用繼承?
- 24. C++元編程,爲什麼和什麼時候應該使用?
- 25. 什麼時候應該讓函數返回一個promise?
- 26. 什麼時候使用哪種方式訪問UI線程?
- 27. 可繪製不會繪製SurfaceView,線程實現,不覆蓋onDraw
- 28. 什麼時候應該使用FSharpFunc.Adapt?
- 29. 什麼時候應該關閉SolrSearcher?
- 30. 什麼時候應該使用_aligned_malloc()?