天天看點

View優化

前面寫了個view畫圓弧,為了讓他和底層圖檔效果融合,采用先把圓弧畫到和圖檔一樣大小的畫布上,然後用canvas的變換位圖方法映射過去。

View優化

可是通過traceview分析到,viewrootimpl.ondraw函數平均時間為72.808那是遠大于16,卡是必然的,我們發現裡面的自定義view的ondraw函數時間就達24ms之多,主要是在createbitmap和gc上耗時較大。

跟蹤imageview的fill_center模式,發現他并沒有耗時這麼長,原來它直接用matrix對canvas進行變換,省去了上述兩個最耗時的操作。

View優化

這裡的自定義view ondraw函數時間不到1ms減小了很多,目前rootview時間為48ms,還是卡,有待進一步優化。

後續:

整了一下午,寫了個測試程式,使用的屬性動畫,底層可以看到是調用opengl的交換緩沖區實作,ondraw控制在14毫秒左右;

可我自己的程式删減得代碼都一樣了,底層始終在調imageview的draw bitmap,它的時間就在30秒以上,那個傷心呀。

後面準備把測試程式的activity弄過來一步一步加看到底怎麼回事,弄過來才發現,好好的代碼時間也在30毫秒以上了。

看androidmanifest.xml發現一個是sdk

11一個是14,修改過來,現在的時間在21毫秒了,效果還是有提過的,離16毫秒越來越近了。