1. 程式人生 > >Android TextureView 與 SurfaceView用法區別

Android TextureView 與 SurfaceView用法區別

SurfaceView和TextureView均繼承於android.view.View,與其它View不同的是,兩者都能在獨立的執行緒中繪製和渲染,在專用的GPU執行緒中大大提高渲染的效能。

一、SurfaceView專門提供了嵌入檢視層級的繪製介面,開發者可以控制該介面像Size等的形式,能保證介面在螢幕上的正確位置。但也有侷限:

  1. 由於是獨立的一層View,更像是獨立的一個Window,不能加上動畫、平移、縮放
  2. 兩個SurfaceView不能相互覆蓋。

二、TextureView更像是一般的View,像TextView那樣能被縮放、平移,也能加上動畫。TextureView只能在開啟了硬體加速的Window中使用,並且消費的記憶體要比SurfaceView多,並伴隨著1-3幀的延遲。

三、TextureView和SurfaceView都是繼承自View類的,但是TextureView在Andriod4.0之後的API中才能使用。SurfaceView可以通過SurfaceHolder.addCallback方法在子執行緒中更新UI,TextureView則可以通過TextureView.setSurfaceTextureListener在子執行緒中更新UI,個人認為能夠在子執行緒中更新UI是上述兩種View相比於View的最大優勢。

    但是,兩者更新畫面的方式也有些不同,由於SurfaceView的雙緩衝功能,可以是畫面更加流暢的執行,但是由於其holder的存在導致畫面更新會存在間隔。並且,由於holder的存在,SurfaceView也不能進行像View一樣的setAlpha和setRotation方法,但是對於一些類似於坦克大戰等需要不斷告訴更新畫布的遊戲來說,SurfaceView絕對是極好的選擇。但是比如視訊播放器或相機應用的開發,TextureView則更加適合。

如何選擇?

在我音視訊應用工程裡面,需要實現縮放,移動,層疊功能,所以選擇的是TextureView。

之前接觸過天氣專案,需要在桌面顯示天氣狀態的動畫,這種屬於全屏鋪滿,用的是SurfaceView。