在 Android 中進行繪圖, 通常會用到 View 或 SurfaceView,
SurfaceView 和 View 最本質的區別在於:SurfaceView 是在一個新起的單獨執行緒中可以重新繪製畫面,而 View 必須在 UI 的主執行緒中更新畫面。
那麼在 UI 的主執行緒中更新畫面,可能會引發問題,比如你更新畫面的時間過長,那麼你的主 UI 執行緒會被你正在畫的函數阻塞,那麼將無法回應按鍵,觸屏等消息。
所以基於以上,根據遊戲特點,一般分成兩類。
1. 被動更新畫面的。比如棋類,這種用 View 就好了。因為畫面的更新是賴於 onTouch 來更新,可以直接使用 invalidate。因為這種情況下,這一次 Touch 和下一次的 Touch 需要的時間比較長些,不會產生影響。 (如: 繪圖 App)
2. 主動更新。比如一個人在一直跑動。這就需要一個單獨的 Thread 不停的重繪人的狀態,避免阻塞主 UI Thread。所以顯然 View 不合適,需要 SurfaceView 來控制。 (如: 拉霸台 App, 太陽系 App)
3. SurfaceView 具有雙緩衝機制。因此,開發遊戲時儘量使用 SurfaceView 而不要使用 View,這樣的話效率較高,而且 SurfaceView 的功能也更加完善。