SurfaceView和普通View的區別、以及TextureView
SurfaceView和普通View的區別
首先,SurfaceView是在一個新開的子線程中可以重新繪制畫面,而view必須在UI的主線程中更新畫面。
出現 SurfaceView 的原因在於:雖然說通常情況下 View 已經可以滿足大部分的繪圖需求,但還是有缺陷,View 是通過刷新來重繪視圖的,Android 系統通過發出 VSYNC 信號來進行屏幕的重繪,刷新的時間間隔是16ms,果在 16ms 內刷新完成的話是沒有什么影響的,但是如果刷新的時候執行的操作邏輯太多,那么會出現卡頓的現象,將無法響應按鍵、觸屏等消息。SurfaceView 就是解決這個問題的,使用SurfaceView由於是在子線程中更新畫面所以不會阻塞UI主線程,但這也帶來了另一個問題,就是事件同步,比如觸屏了一下,需要在SurfaceView中的thread處理,一般就需要有一個event queue的設計來保存touchevent,這會稍稍復雜一點,因為涉及到線程安全。
View 主要用於主動更新的情況下,而 SurfaceView 主要用於被動更新,例如頻繁的刷新;
View 在主線程中對畫面進行更新,而 SurfaceView 通常會通過一個子線程來進行更新;
View 在繪圖的時候是沒有使用雙緩沖機制的,而 SurfaceView 在底層實現中使用了雙緩沖機制;
參考
Android自定義View之雙緩沖機制和SurfaceView
SurfaceView和TextureView的區別