Handler和postInvalidate()Android。程序中可以使用的界面刷新方法有兩種,分別是利用Handler和利用postInvalidate()來實(shí)現(xiàn)在線程中刷新界面。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),蛟河企業(yè)網(wǎng)站建設(shè),蛟河品牌網(wǎng)站建設(shè),網(wǎng)站定制,蛟河網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,蛟河網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
先總體概括一下,Android屏幕刷新使用的是“雙緩存+VSync機(jī)制”,單純的雙緩沖模式容易造成jank(丟幀)現(xiàn)象,為了解決這個(gè)問題,Google在 Android1 提出了Project Butter(油工程),引入了 drawing with VSync 的概念。
動(dòng)態(tài)添加的時(shí)候?yàn)榻M件設(shè)置id,刪除的時(shí)候根據(jù)id查找到對(duì)應(yīng)組件,然后刪除 根據(jù)父節(jié)點(diǎn),獲取所有父組件下的子組件,然后依次刪除。
通常的做法,在onResume中發(fā)一起一個(gè)異步的請(qǐng)求去拿數(shù)據(jù),通過回調(diào),收到返回的數(shù)據(jù),然后更新UI。網(wǎng)絡(luò)獲取數(shù)據(jù)結(jié)束判斷數(shù)據(jù)有更新,然后通過set將控件的數(shù)據(jù)更新。
三緩存 就是在雙緩沖機(jī)制基礎(chǔ)上增加了一個(gè) Graphic Buffer 緩沖區(qū),這樣可以最大限度的利用空閑時(shí)間,帶來的壞處是多使用的一個(gè) Graphic Buffer 所占用的內(nèi)存。以上就是Android屏幕刷新的原理了。
二級(jí)緩存工作機(jī)制。所謂二級(jí)緩存實(shí)際上并不復(fù)雜,當(dāng)Android端需要獲得數(shù)據(jù)時(shí)比如獲取網(wǎng)絡(luò)中的圖片,我們首先從內(nèi)存中查找(按鍵查找),內(nèi)存中沒有的再從磁盤文件或sqlite中去查找,若磁盤中也沒有才通過網(wǎng)絡(luò)獲取。
Back Buffer 根據(jù)屏幕的刷新將數(shù)據(jù) copy 到 Frame Buffer,這便是 VSYNC 的用武之地。在 Android 1 之前,Android 使用雙緩沖機(jī)制。
1、首先應(yīng)用程序向系統(tǒng)服務(wù)申請(qǐng)一塊緩存,系統(tǒng)服務(wù)返回buff,應(yīng)用程序接收到之后開始進(jìn)行繪制工作,等到繪制結(jié)束后再提交給系統(tǒng)服務(wù)。系統(tǒng)服務(wù)將這個(gè)buff寫到屏幕的一個(gè)緩存區(qū)中。屏幕會(huì)以一定的刷新率刷新。
2、Android1之前,屏幕刷新也遵循 上面介紹的雙緩存+VSync 機(jī)制;但是會(huì)存在下面的缺陷。上層的有更新畫面的需求時(shí),才會(huì)去重新繪制和顯示畫面;上層更新畫面的時(shí)機(jī)是不確定的。
3、而在Android 1(JB)中已經(jīng)開始引入VSync機(jī)制,用來同步渲染,讓AppUI和SurfaceFlinger可以按硬件產(chǎn)生的VSync節(jié)奏進(jìn)行工作。
4、換言之,應(yīng)用層負(fù)責(zé)繪制,系統(tǒng)層負(fù)責(zé)渲染,通過進(jìn)程間通信把應(yīng)用層需要繪制的數(shù)據(jù)傳遞到系統(tǒng)層服務(wù),系統(tǒng)層通過刷新機(jī)制把數(shù)據(jù)更新到屏幕上。