【Android 应用开发】View 与 SurfaceView 区别
文章目錄
- 組件刷新所在線程
- 性能 資源 操作
- 主動(dòng)更新與被動(dòng)更新
- View , SurfaceView , GLSurfaceView
組件刷新所在線程
1. View 主線程刷新 UI : View 的更新是在 UI 主線程中進(jìn)行更新 , 如果更新中執(zhí)行耗時(shí)操作 , 會(huì)阻塞主線程 , 甚至出現(xiàn) ANR 異常 ;
2. SurfaceView 在子線程刷新 UI : SurfaceView 中可以創(chuàng)建新的子線程 , 并在該子線程中刷新 UI ;
性能 資源 操作
1. View 組件 :
- ① View 性能 : View 控件的性能較低 ;
- ② 資源影響性能 : View 容易受外界影響 , 系統(tǒng)會(huì)決定 View 界面的刷新時(shí)機(jī) , 如果出現(xiàn)內(nèi)存或 CPU 資源緊張的情況 , View 可能出現(xiàn)刷新卡頓的情況 ;
- ③ 操作簡(jiǎn)單 : View 符合 Android 組件操作模式 , 是標(biāo)準(zhǔn)的 Android 控件 , 使用和操作比較簡(jiǎn)單 ;
2. SurfaceView 組件 :
- ① 刷新性能 : SurfaceView 刷新性能較高 ;
- ② 受資源影響較小 ;
- ③ 操作復(fù)雜 : 但是控制起來(lái)比較復(fù)雜 , 需要在其中創(chuàng)建線程 , 并需要處理主線程與該線程之間的同步問(wèn)題 ;
主動(dòng)更新與被動(dòng)更新
1. 被動(dòng)更新 ( 低頻率 ) : View 中適合使用被動(dòng)更新 ; 由于其在主線程中 , 由觸摸等事件可觸發(fā)更新操作 , 直接調(diào)用 View 的 invalidate 方法 , 即可控住 View 組件更新 UI ; 使用較少的更新次數(shù)可以達(dá)到想要的效果 ; 如果更新頻率過(guò)高 , 會(huì)影響主線程運(yùn)行 , 造成卡頓 ;
2. 主動(dòng)更新 ( 高頻率 ) : SurfaceView 中適合復(fù)雜的動(dòng)畫(huà) , 每隔一段時(shí)間都要重新繪制 , 刷屏頻率以毫秒值計(jì)數(shù) ; 可以開(kāi)啟單獨(dú)的線程每隔 20 ms 刷新一次界面 , 這樣可以避免阻塞主線程 ;
View , SurfaceView , GLSurfaceView
1. View : Android 中的標(biāo)準(zhǔn)組件 , 用于顯示視圖 , 內(nèi)部提供 Canvas 畫(huà)布 , 可以調(diào)用 Canvas 繪圖函數(shù)繪制界面 , 可以設(shè)置觸摸事件 等 ; View 組件繪圖操作必須在主線程中進(jìn)行 , 頻繁更新界面 , 會(huì)阻塞 UI 線程 , 造成卡頓 ;
2. SurfaceView : SurfaceView 是 View 的子類 , 繪圖的過(guò)程中使用了雙緩沖機(jī)制 , 繪圖效率很高 , 其功能在內(nèi)部可以創(chuàng)建線程 , 并在線程中以極高的頻率 ( 5 ~ 100 ms ) 刷新 UI 界面 , 有 View 的所有功能 ; 該組件很適合 2D 游戲開(kāi)發(fā) ;
3. GLSurfaceView : 該組件是 SurfaceView 的子類 , 可以調(diào)用 OpenGLES 類庫(kù) , 開(kāi)發(fā) 3D 效果 , 可以用于 3D 游戲開(kāi)發(fā) ;
總結(jié)
以上是生活随笔為你收集整理的【Android 应用开发】View 与 SurfaceView 区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【C++ 语言】线程 ( 线程创建方法
- 下一篇: 【Android 应用开发】LruCac